public class ChangeFragment extends Fragment {
private RecyclerView mRecyclerView;
private MyAdapter adapter1,adapter2;
private WordViewModel mWordViewModel;
private LiveData<List<Word>> allWords;
public ChangeFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_change, container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ViewModelProvider.AndroidViewModelFactory factory = ViewModelProvider.AndroidViewModelFactory.getInstance(requireActivity().getApplication());
ViewModelProvider provider = new ViewModelProvider(requireActivity(),factory);
mWordViewModel = provider.get(WordViewModel.class);
//LiveData<List<Word>> all = mWordViewModel.getAllWordLive();
//Word word = all.getValue().get(1);
//String string = word.getWord();
//Log.d("my log",String.valueOf(string));
mRecyclerView = requireActivity().findViewById(R.id.recyclerView_change);
mRecyclerView.setLayoutManager(new LinearLayoutManager(requireActivity()));
adapter1 = new MyAdapter(false,mWordViewModel);
adapter2 = new MyAdapter(true,mWordViewModel);
boolean temp = getArguments().getBoolean("argument_to_change",false);
if(temp){
mRecyclerView.setAdapter(adapter2);
}else{
mRecyclerView.setAdapter(adapter1);
}
allWords = mWordViewModel.getAllWordLive();
allWords.observe(getViewLifecycleOwner(), new Observer<List<Word>>() {
@Override
public void onChanged(List<Word> words) {
adapter1.notifyDataSetChanged();
adapter2.notifyDataSetChanged();
}
});
}
}
你应该把你的数据来源,数据什么时候传给adapter的部分代码贴出来,一般来说是数据转换给adapter的时候出现了问题。
看看传入给adapter的集合的地址,和你获取数据集合的地址在传给adapter的是否一样
建议:
1.通过添加log,判断是否真的获取到了数据
2.对不确定的点进行单步调试,查看代码是否按照预期执行
3.在未出错的fragment上也添加log,分析其同出错的fragment的不同。
4.如上所说,你应该把整体的数据流程代码贴出来,尤其是adapter的代码。
Adapter绑定数据那里调试一下,有过这种情况,明明报空指针,但是没崩溃的,但是会发现各种错误。