如何从OnClickListener引用MainActivity?
问题描述:
这是MainActivity
:如何从OnClickListener引用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
中的主要活动?
答
你可以做MainActivity.this
获得在MainActivity背景
答
这是正确的代码:
imgModeContrastLeft.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImagePair imp = new ImagePair();
String objId = "sMfSYvBxmX";
imp.downloadImagePairInBackground(MainActivity.this, objId);
}
});
答
v.getContext()
这里是 “最好” 的方式
public void onClick(View v) {
ImagePair imp = new ImagePair();
String objId = "sMfSYvBxmX";
imp.downloadImagePairInBackground(v.getContext(), objId);
}
这将使其更“可移植的“,所以如果你移动,决定重用另一个类的代码,或者改变类名,你不需要改变它。
你有它的方式,this
是指内部类,而不是Activity
Context
答
首先,请记住,一个整体将InnerClass被系在外面类的每一个对象,受条件是InnerClass不是静态的,并且你也创建了一个InnerClass的对象。
现在,每当你需要访问调用将InnerClass的语法对象的引用是:
OuterClassName.this;
答
正如在其他的答案中的一个被提到的,你可以有资格this
与类名从内部类中引用特定的外部类。然而,这种语法是有点模糊,所以我会建议更明确的(如果也更详细)简单地分配给一个本地方法:
final MainActivity mainActivity = this;
imgModeContrastLeft.setOnClickListener(...); // reference "mainActivity"
'getActivity()'或'getBaseActivity()'如果我”我认为它是'getBaseContext();'? – Razgriz 2014-12-01 17:34:51