Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从(列表)适配器回调到活动_Android - Fatal编程技术网

Android 从(列表)适配器回调到活动

Android 从(列表)适配器回调到活动,android,Android,我有一个具有ListView的活动,我设置了一个适配器 MyAdapter extends BaseAdapter 该适配器具有回调接口 OnPdfClickedListener callback; public interface OnPdfClickedListener { public void onPdfClicked(); } 在活动中, MyActvivity implements MyAdapter.OnPdfClickedListener 及 这与所描述的基本

我有一个具有ListView的活动,我设置了一个适配器

MyAdapter extends BaseAdapter
该适配器具有回调接口

OnPdfClickedListener callback; 

public interface OnPdfClickedListener {
    public void onPdfClicked();

}
在活动中,

MyActvivity implements MyAdapter.OnPdfClickedListener

这与所描述的基本相同,就像碎片的魅力一样。 从适配器尝试相同操作时,回调对象为null

我还尝试了实例化,比如

OnPdfClickedListener callback = new OnPdfClickedListener() {

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

    }
};
我没有错误,但是活动中的相应方法从未被调用

我的问题是1。为什么回调对象在片段中使用时不是空的,它从来没有实例化过

二,。如何从适配器回调到活动

  • 为什么回调对象在片段中使用时不是空的,它从来没有实例化过
  • 您的
    活动
    很可能未注册为侦听器,使用您创建的
    回调
    变量(与
    活动
    无关)创建了一个
    OnPdfClickedListener的实例
    ,并且(可能)在事件发生时使用了该实例

    如何从适配器回调到活动

    将对
    活动的引用
    传递给您的
    MyAdapter
    类,将其强制转换为
    OnPdfClickedListener
    并使用该引用调用
    onPdfClicked
    而不是当前的
    回调
    变量

  • 为什么回调对象在片段中使用时不是空的,它从来没有实例化过
  • 您的
    活动
    很可能未注册为侦听器,使用您创建的
    回调
    变量(与
    活动
    无关)创建了一个
    OnPdfClickedListener的实例
    ,并且(可能)在事件发生时使用了该实例

    如何从适配器回调到活动

    将对
    活动的引用
    传递给您的
    MyAdapter
    类,将其强制转换为
    OnPdfClickedListener
    ,并使用该引用调用
    onPdfClicked
    ,而不是当前的
    回调
    变量。

    尝试添加以下内容:

    在实现接口的活动中:

    new MyAdapter(this,....);
    
    在适配器中:

    MyAdapter(Context context, ...){
      callback = (OnPdfClickedListener)context;
    }
    
    尝试添加以下内容:

    在实现接口的活动中:

    new MyAdapter(this,....);
    
    在适配器中:

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

    真管用,多谢了!我仍然不明白为什么,但我还是要想一想:)@Ascorbin要发送事件(pdf单击),您将在类型为
    OnPdfClickedListener
    的对象上调用
    OnPdfClickedListener()方法,该对象将是pdf单击事件的侦听器/观察者(该对象已注册为观察者)。为了将事件发送到您的
    活动
    ,您需要调用
    活动
    对象上的
    onPdfClicked
    方法(这是一个
    OnPdfClickedListener
    ),这就是您需要传递活动引用的原因。在片段示例中,他们使用回调变量来防止
    NullPointerException
    ,因为片段的生命周期更复杂。这很有效,非常感谢!我仍然不明白为什么,但我还是要想一想:)@Ascorbin要发送事件(pdf单击),您将在类型为
    OnPdfClickedListener
    的对象上调用
    OnPdfClickedListener()方法,该对象将是pdf单击事件的侦听器/观察者(该对象已注册为观察者)。为了将事件发送到您的
    活动
    ,您需要调用
    活动
    对象上的
    onPdfClicked
    方法(这是一个
    OnPdfClickedListener
    ),这就是您需要传递活动引用的原因。在片段示例中,他们使用回调变量来防止出现
    NullPointerException
    ,因为片段的生命周期更复杂。您是如何解决的???我也有同样的问题!我有一个适配器,我希望将单击元素的位置发送到调用适配器的片段!请帮帮我谢谢!你是怎么解决的???我也有同样的问题!我有一个适配器,我希望将单击元素的位置发送到调用适配器的片段!请帮帮我谢谢!