android其他类怎么调用继承自activity的类(mainactivity)中的非静态方法?

publicclassMainActivityextendsActivity{privateMainActivity(){};privatestaticMainActiv... public class MainActivity extends Activity{
private MainActivity(){};
private static MainActivity mainActivity;
public static MainActivity getmainActivity(){
mainActivity=new MainActivity();
return mainActivity;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button dailButton= (Button) findViewById(R.id.bt_call);
dailButton.setOnClickListener(new Mylistener());
}
}

public class Mylistener implements OnClickListener {

@Override
public void onClick(View v) {
MainActivity mActivity=MainActivity.getmainActivity();
EditText telEditText=(EditText)mActivity.findViewById(R.id.et_telNum);
String number=telEditText.getText().toString();
Intent intent=new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+number));
mActivity.startActivity(intent);

}

}
着了监听类我不想把它放在mainActivity类的内部,但是在外部调用mainActivity的方法时还得new对象而且new出来的也不是同一个对象。能不能设计成单例的呢?这样好像编译不通过,有没有别的办法
展开
 我来答
JINLegend
推荐于2016-06-27 · TA获得超过802个赞
知道小有建树答主
回答量:241
采纳率:100%
帮助的人:127万
展开全部

据我所知的Activity机制,Activity不是由你来new对象出来的,而是由android系统创建对象的。Activity与Activity之间只能通过广播来通讯。非Activity类不可能直接调用Activity对象方法。本来监听类本来就是被监听对象所在容器的私有专属组件,没道理放类外。

当然,你非要把Mylistener放类外也不是绝对不行。这样修改:

public class MainActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
  Button dailButton= (Button) findViewById(R.id.bt_call);
  dailButton.setOnClickListener(new Mylistener(this));
}
}

public class Mylistener implements OnClickListener {
        private MainActivity mainActivity;
        public Mylistener(MainActivity activity){
                this.mainActivity=activity;
        }
@Override
public void onClick(View v) {
EditText telEditText=(EditText)mainActivity.findViewById(R.id.et_telNum);
String number=telEditText.getText().toString();
Intent intent=new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+number));
mainActivity.startActivity(intent);
}

}
windy建建建
推荐于2016-03-20 · TA获得超过263个赞
知道答主
回答量:170
采纳率:85%
帮助的人:53.6万
展开全部
1,这个其它类不是从Activity继承而来,所以想通过MainActivity类(继承自Activity类,所以有一些方法可以直接使用,因为它遵守ANDROID下的一些框架)的方法来做一些事情。像发广播消息什么的。

2,MainActivity类在开始就被ONCREATE( )了,所以应该已经实例化了,但在其它类中怎么引用?怎么去getInstance把MainActivity的实例得到

3,在其它类直接MainActivity.this.xxx( )这样引用不行,报下面的错误:
No enclosing instance of the type MainActivity is accessible in scope.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式