将数据发送到“初始化”选项卡时出现问题。在方法getData()
中,我收到的适配器为null,recyclerview也为null。
TabOne one = new TabOne()
one.getData(populatedList)
接下来是错误=>
java.lang.NullPointerException: Attempt to invoke virtual method 'void OneAdapter.setData(java.util.List)' on a null object reference.
最好通过片段或其他任何方式通过捆绑发送数据。
我之所以叫getData()
,是因为这是API的响应。
public class TabOne extends Fragment {
private Unbinder unbinder;
@BindView(R.id.fab)
FloatingActionButton floatingActionButton;
@BindView(R.id.recycler_view_recycler)
RecyclerView recyclerView;
private OneAdapter oneAdapter;
private List<Response> response = new ArrayList<>();
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.tab_one, container, false);
unbinder = ButterKnife.bind(this, view);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
oneAdapter = new OneAdapter(getContext(), response);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(oneAdapter);
return view;
}
public void getData(List<Response> response){
oneAdapter.setData(response);
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
}
答案 0 :(得分:2)
您不能从其他“活动/片段”中调用片段的方法。
您有几种解决此问题的方法
计划A (建议)
使用EventBus库
1 :像这样创建EventClass.java
public class EventClass{
private List<FILL IT WITH YOUR OBJECT> populatedList;
public EventClass(int populatedList) {
this.populatedList= populatedList;
}
public int getPopulatedList() {
return populatedList;
}
}
2 :使用它
在您的活动中代替此
TabOne one = new TabOne()
one.getData(populatedList)
使用EventBus并以此发布事件
EventBus.getDefault().postSticky(new EventClass(populatedList));
3 抓取片段中的数据。将此功能添加到您的片段
@Subscribe
public void onEvent(EventClass event) {
oneAdapter.setData(event.getPopulatedList());
}
4 不要忘记在Fragmet中注册和注销EventBus
EventBus.getDefault().register(this);//add in onCreateView
//...
EventBus.getDefault().unregister(this);//add in onDestroyView
计划B
使用界面设计进行片段中的回调。您必须为片段中的changingDataListener
和implements
之类的更改数据创建一个接口,并从活动
计划C (高级)
在PublishSubject
中使用 RxJava ,您可以创建Observable,以观察新数据,并在新数据到达时可以更新适配器。
相信我计划A更简单!