在onCreateView
方法我準備適配器用於回收視圖片段:getAdapter()是setAdapter後空()
ProfileAdapter profileAdapter;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.profile_list_fragment, container, false);
ButterKnife.bind(this, root);
setRetainInstance(true);
if (savedInstanceState == null) {
profileAdapter = new ProfileAdapter(getContext(), this);
profileAdapter.items.add(...)
}
recyclerView.setAdapter(profileAdapter);
recyclerView.requestFocus();
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.addItemDecoration(new RecycleViewItemDecorator(getContext()));
recyclerView.getAdapter().notifyDataSetChanged();
return root;
}
的工作正常。我在很多設備上測試過它。不過,我剛剛收到了客戶的崩潰報告。該應用程序崩潰,在這條線與顯示java.lang.NullPointerException:
recyclerView.getAdapter().notifyDataSetChanged();
但我不能重現此錯誤。爲什麼適配器在設置後應該爲空?
顧客手機是HTC One S與android 4.1。我的應用程序是用android 6和最低支持版本4.1構建的。
您是否看到任何適配器爲空的原因?從我的角度來看,唯一的原因是適配器沒有被保留,例如在方向變化。但爲什麼這應該在我的三星Galaxy S2(Android 4.1)而不是在HTC One S上?
是的,它看起來像'savedInstanceState'不爲空,因此不設置profileAdapter的值。 –
你正在創建profileAdapter的條件 - 顯然你有一個情況,其中savedInstanceState不爲null,profileAdapter爲空 – GreyBeardedGeek
@GreyBeardedGeek沒有if條件適配器將被重新創建輪換。 setRetainInstance(true)保留適配器。然而,對於客戶由於某種原因,它不被保留... –