我有一个MainActivity来处理UI和按钮,但我有一个单独的类来处理代码的onClickListener
部分。我的Main类定义为:public class MainActivity extends Activity
,类中的按钮定义如下:
MyButtonListener l = new MyButtonListener();
b1 = (Button) findViewById(R.id.button1);
b1.setOnClickListener(l);
MyButtonListener
类定义为public class MyButtonListener extends MainActivity implements View.OnClickListener
。问题在于,当我尝试在MyButtonListener
中举杯时。我不知道吐司的背景。我尝试过:MainActivity.this,MyButtonListener.this,getContextApplication()。他们似乎都没有工作。这就是我试图展示吐司的方式:
Toast.makeText(MyButtonListener.this, message, Toast.LENGTH_LONG).show();
为了显示MyButtonListener
类的吐司,有没有人放置什么上下文?
答案 0 :(得分:3)
创建全局变量
Context context;
在MainActivity中并设置
context = this;
in onCreate主要活动方法
现在传递MyButtonListener构造函数中的上下文 像这样
MyButtonListener l = new MyButtonListener(context);
b1 = (Button) findViewById(R.id.button1);
b1.setOnClickListener(l);
并在MyButtonListener中添加构造函数
private Context context;
public MyButtonListener(Context context) {
this.context = context;
}
并在吐司中使用该上下文
答案 1 :(得分:2)
在Context
的构建器中添加MyButtonListener
并使用它来显示Toast
。
public MyButtonListener(Context c);
来自MainActivity
:
MyButtonListener l = new MyButtonListener(this);
答案 2 :(得分:2)
使用参数中的View.getContext()。
E.g:
...
void onClick(View v){
Context ctx = v.getContext();
}
...
这可以避免手动传递上下文。
答案 3 :(得分:1)
这不是您获得的上下文,而是不同参考的不同上下文,而是 MyButtonListener的构造函数的主要活动的pass the reference
并使用传递给它的上下文。
你正在做的事实上是继承mainactivity而不是它的创建时间,所以使用MyButtonListene.this
不会在前面带来吐司。所以延长主动性是完全没用的/没有意义的。
答案 4 :(得分:1)
我认为没有任何理由让MyButtonListener扩展MainActivity。
做这样的事情:
public class MyButtonListener implements View.OnClickListener {
private Context context;
public MyButtonListener(Context context) {
this.context = context;
}
...
}
从MainActivity传递上下文:
MyButtonListener l = new MyButtonListener(this.getApplicationContext());
答案 5 :(得分:1)
MyButtonListener l = new MyButtonListener(getApplicationContext());
and create parameterize constructor in
MyButtonListener
and use that Context