【发布时间】:2015-10-14 17:25:46
【问题描述】:
不确定我的观察者模式有什么问题:
我已将我的界面定义为:
public interface OnBackFilterPressListener {
public ArrayList<FoodType> filterFoodType ();
}
当我按下后退按钮时,我希望激活监听器 - 所有这些代码都在我的 activity 类中:
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackFilterPressListener.filterFoodType();
}
}
在我的适配器类中,我有以下代码:
public class RandomRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements SearchActivity.OnBackFilterPressListener {
@Override
public ArrayList<FoodType> filterFoodType() {
return foodTypes;
}
}
当我在活动中按下后退按钮时,我只想在我的活动类中返回适配器中的数据数组。
但是我收到了这个错误:
java.lang.NullPointerException:尝试调用接口方法 'java.util.ArrayList com.example.simon..SearchActivity$OnBackFilterPressListener.filterFoodType()' 在空对象引用上
foodType 肯定存在 - 适配器将数据加载到活动中,我可以看到它显示在 android 模拟器上。单击返回按钮时出现此错误。
【问题讨论】:
-
显然
onBackFilterPressListener是null。你是怎么初始化的? -
也许这就是问题所在......我刚才说 OnBackFilterPressListener onBackFilterPressListener 作为我的成员变量。我应该如何初始化它?
-
将
RandomRecyclerViewAdapter的实例分配给它。 -
@Simon SearchActivity 是一个 Activity 类,对吧? recyclerview 附在哪里?是为了不同的活动吗?
-
所以 SearchActivity 是一个活动类,它持有对片段的引用。片段内部是一个recyclerview,适配器用于该recyclerview。这真的没关系,因为观察者模式肯定会在你放置它的任何地方观察它,并且一旦你的事件发生就会被触发? Activity、Fragment和Adapter都是同时在屏幕上同时显示的,所以它不像Activity或者Fragment里面有onStop或者onPaused。