0

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

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");

}

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

我也尝试过像

OnPdfClickedListener callback = new OnPdfClickedListener() {

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

    }
};

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

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

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

4

2 回答 2

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

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

如何从适配器回调 Activity?

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

于 2013-03-06T10:07:36.220 回答
0

尝试添加这个:

在实现接口的 Activity 中:

new MyAdapter(this,....);

在您的适配器中:

MyAdapter(Context context, ...){
  callback = (OnPdfClickedListener)context;
}
于 2013-03-06T10:10:55.237 回答