【问题标题】:Callback from (List)Adapter to Activity从 (List)Adapter 回调到 Activity
【发布时间】:2013-03-06 09:55:46
【问题描述】:

我有一个带有 ListView 的 Activity,我设置了一个适配器

MyAdapter extends BaseAdapter

那个适配器有一个回调接口

OnPdfClickedListener callback; 

public interface OnPdfClickedListener {
    public void onPdfClicked();

}

在活动中

MyActvivity implements MyAdapter.OnPdfClickedListener

@Override
    public void onPdfClicked() {

    Log.d("TEST", "PDF CLICKED in ACTVIIVTY");

}

这与here 描述的几乎相同,它就像碎片的魅力一样。 当从适配器尝试相同时,回调对象为空。

我也尝试过实例化

OnPdfClickedListener callback = new OnPdfClickedListener() {

    @Override
    public void onPdfClicked() {
        // TODO Auto-generated method stub

    }
};

那时我没有错误,但从未调用过 Activity 中的相应方法。

我的问题是1.为什么回调对象在片段中使用时不是null,它从未实例化

以及 2. 如何从适配器回调 Activity?

【问题讨论】:

    标签: android


    【解决方案1】:
    1. 为什么在片段中使用时回调对象不是 null,它从未实例化

    您的Activity 很可能没有注册为侦听器,您创建的callback 变量(与Activity 无关)是OnPdfClickedListener 的实例,并且(可能)在事件发生了。

    如何从适配器回调 Activity?

    将对Activity 的引用传递给您的MyAdapter 类,将其转换为OnPdfClickedListener 并使用它来调用onPdfClicked 而不是当前的callback 变量。

    【讨论】:

    • 这行得通,非常感谢!我仍然不明白为什么,但我会绕开它:)
    • @Ascorbin 要发送事件(点击pdf),您将在OnPdfClickedListener 类型的对象上调用onPdfClicked() 方法,这将是pdf点击事件的侦听器/观察者(该对象已注册自己作为观察者)。为了将事件发送到您的Activity,需要在Activity 对象(这是一个OnPdfClickedListener)上调用onPdfClicked 方法,这就是您需要传递活动引用的原因。在片段示例中,他们使用回调变量来防范NullPointerException,因为片段具有更复杂的生命周期。
    【解决方案2】:

    尝试添加这个:

    在实现接口的 Activity 中:

    new MyAdapter(this,....);
    

    在您的适配器中:

    MyAdapter(Context context, ...){
      callback = (OnPdfClickedListener)context;
    }
    

    【讨论】:

    • 你是怎么解决的???我有同样的问题!我有一个适配器,我希望将单击的元素的位置发送到调用适配器的片段!请帮帮我,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    相关资源
    最近更新 更多