用于从onClickListener类显示Toast的上下文

时间:2014-08-08 20:44:52

标签: java android

我有一个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类的吐司,有没有人放置什么上下文?

6 个答案:

答案 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