Android中点击条目时监听器未触发问题咨询
让我来帮你梳理下当前的情况,看看还需要做哪些操作确保监听器能正常触发,并且顺利拿到数据~
首先要修正核心的监听器绑定问题
你当前在第一个类里写了resultListener = this;,这里的this指向的是第一个类自己的实例,但你的监听器实现是在第二个类里啊!这就导致第二个类的onActivityResult完全不会被调用——你现在绑定的是错误的对象,这是最关键的问题。
正确的监听器绑定步骤
你需要让第一个类持有第二个类(监听器实现类)的实例,具体可以这么做:
- 在第一个类中添加监听器成员变量,并提供绑定方式:
// 第一个类里定义监听器成员 private ResultListener mResultListener; // 方式一:通过方法设置监听器 public void setResultListener(ResultListener listener) { mResultListener = listener; } // 或者方式二:通过构造方法传入监听器 public FirstClass(ResultListener listener) { mResultListener = listener; } - 在调用监听器时,使用这个绑定好的成员变量(记得做空指针判断,避免崩溃):
private void sendProviderData(General provider) { // 先把数据存入Singleton Singleton.getInstance().setProviderId(provider.getId()); Singleton.getInstance().setProviderIcon(provider.getIcon()); Singleton.getInstance().setProviderName(provider.getName()); // 调用绑定好的监听器 if (mResultListener != null) { showLog("准备触发监听器"); mResultListener.onActivityResult(CommonUtils.PICK_PROVIDER_CODE, CommonUtils.RESULT_OKAY); } else { showLog("警告:监听器未绑定!"); } dialog.dismiss(); } - 在第二个类中创建第一个类实例时,把自己(第二个类的实例)作为监听器传进去:
// 比如在第二个类的初始化代码里 FirstClass firstClass = new FirstClass(this); // 如果用构造方法传入 // 或者 FirstClass firstClass = new FirstClass(); firstClass.setResultListener(this); // 如果用设置方法
调整数据获取逻辑
你现在把数据存在了Singleton里,第二个类的onActivityResult可以直接从Singleton中取出数据,代替原来注释里的data.getLongExtra逻辑:
@Override public void onActivityResult(int requestCode, int resultCode) { showLog("监听器已触发!"); if (resultCode == CommonUtils.RESULT_OKAY) { switch (requestCode) { case CommonUtils.PICK_PROVIDER_CODE: showLog("worked!"); // 从Singleton读取数据 long providerId = Singleton.getInstance().getProviderId(); String providerName = Singleton.getInstance().getProviderName(); String providerIcon = Singleton.getInstance().getProviderIcon(); // 执行你的业务操作 inputBillProvider.setText(providerName); selected = providerName; setProviderValidation(selected); break; } } }
额外的调试小技巧
- 在第一个类调用监听器的地方加日志,确认监听器实例是否存在;
- 在第二个类的
onActivityResult开头加日志,直观判断监听器是否被触发; - 两边日志对应起来,就能快速定位问题啦。
内容的提问来源于stack exchange,提问作者Anisha Singh
相关产品推荐
相关产品推荐

