我是 java 和 android 开发的新手,我有一个问题,让我解释一下。 我有自定义接口(interface)和自定义类,它们将其用作监听器。
在我的 HomeActivity 中,我在我的自定义类上调用方法,该类通过监听器(接口(interface))响应,这是简短版本:
public class HomeActivity extends Activity implements WebClientResponseListener {
private User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
//....
// I call my class and add this as a listener:
MyWebServiceClient mws = new MyWebServiceClient(getApplicationContext());
mws.getProducts(this.user.getToken(), this)
}
//....
@Override
public void onDataDownloadSuccess(JSONObject jsonObject) {
Log.d("DATA", "SUCCESS");
}
}
当我这样运行时,一切正常。 onDataDownloadSuccess 方法被调用,我可以看到日志输出。
当我尝试从 OnClickListener 运行它时出现问题:
private void sendRequest() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getString(R.string.request_info_title));
builder.setItems(items, this);
//.....
builder.create().show();
}
稍后在同一 Activity 中我有:
public void onClick(DialogInterface dialogInterface, int which) {
MyWebServiceClient mws = new MyWebServiceClient(getApplicationContext());
mws.getProducts(user.getToken(), this)
}
在这种情况下,不会调用我的监听器 onDataDownloadSuccess 方法。 我可以在控制台中看到:
unregisterIRListener() is called
和
GC_FOR_ALLOC freed 1613K, 35% free 13400K/20408K, paused 18ms, total 18ms
我一直在网上寻找解决方案,我已经尝试过一些方法,例如:
//in OnClick
mws.getProducts(user.getToken(), HomeActivity.this);
我创建了私有(private)变量 HomeActivity 并在 onCreate 中调用
homeActivity = this;
后来在 onClick 中我试图传递 homeActivity 而不是这个 但没有运气。 提前致谢。
最佳答案
总是尝试使用 YOUR_ACTIVITY_NAME.this 因为当你只使用 "this" 时,它指向当前的 context
。假设你在 OnClickListener
中,它是一个匿名类,所以当你在其中使用 this 时。它将指向 button
而不是 activity
。因此,您需要使用 activityname.this.
关于java - 在 setOnClickListener 中获取 Activity (this),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22196332/