java - 在 setOnClickListener 中获取 Activity (this)

标签 java android

我是 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.

指向 Activity

关于java - 在 setOnClickListener 中获取 Activity (this),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22196332/

相关文章:

java - 我应该为我的适配器使用 View Holder 模式吗?

android - 找不到参数的方法compile() [com.google.gms :google-services:3. 1.1]

android - 如何捕获运行时android中的未知异常

找不到 Android Facebook LoginButton 类

java - LIBGDX 平滑玩家移动

java - 在 ListView 中动态生成具有可绘制形状的 TextView

java - 如何从实体管理器获取 ResultSetMetaData?

java - 文件存在时出现 FileNotFoundException

java - 如何删除 iText 创建的 PDF 中透明图像周围的黑色边框

android - 我将如何检测广播接收器中的运动传感器?