如何从OnClickListener引用MainActivity?

时间:2014-12-01 17:34:20

标签: android onclicklistener android-context

这是MainActivity

    imgModeContrastLeft.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               ImagePair imp = new ImagePair();
               String objId = "sMfSYvBxmX";
               imp.downloadImagePairInBackground(this, objId);
           }        
    });

this不是MainActivity。如何在OnClickListener

中引用主要活动

5 个答案:

答案 0 :(得分:4)

您可以MainActivity.this获取MainActivity上下文

答案 1 :(得分:2)

v.getContext()这是“最好的”方式

public void onClick(View v) {
    ImagePair imp = new ImagePair();
     String objId = "sMfSYvBxmX";
     imp.downloadImagePairInBackground(v.getContext(), objId);
 }        

它会使它更“便携”,所以如果你移动,决定在另一个类中重用代码,或者更改类名,你就不需要改变它。

你拥有它的方式,this指的是内部阶级,而不是Activity Context

答案 2 :(得分:1)

首先,请记住,整个InnerClass绑定到外部类的每个单独对象,但条件是InnerClass不是静态的,并且您也创建了一个InnerClass对象。

现在,只要您需要访问调用InnerClass的对象的引用,语法就是:

OuterClassName.this;

答案 3 :(得分:0)

这是正确的代码:

imgModeContrastLeft.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               ImagePair imp = new ImagePair();
               String objId = "sMfSYvBxmX";
               imp.downloadImagePairInBackground(MainActivity.this, objId);
           }        
    });

答案 4 :(得分:0)

正如其他一个答案中所指出的,您可以使用类名限定this以引用内部类中的特定外部类。但是,这种语法有点模糊,所以我建议更明确(如果也更详细)的方法简单地分配给本地:

 final MainActivity mainActivity = this;
 imgModeContrastLeft.setOnClickListener(...); // reference "mainActivity"