2015-11-02 47 views
1

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上?

+0

是的,它看起來像'savedInstanceState'不爲空,因此不設置profileAdapter的值。 –

+0

你正在創建profileAdapter的條件 - 顯然你有一個情況,其中savedInstanceState不爲null,profileAdapter爲空 – GreyBeardedGeek

+0

@GreyBeardedGeek沒有if條件適配器將被重新創建輪換。 setRetainInstance(true)保留適配器。然而,對於客戶由於某種原因,它不被保留... –

回答

0

嘗試使用
recyclerView.getAdapter().notifyDataSetChanged(); in onActivityCreated方法而不是onCreateView

它可能會返回null,因爲root視圖尚未附加到片段或活動。

0

如果Fragment將從backstack恢復,例如,如果用戶按下home按鈕並且Activity任務將被銷燬,savedState將不會爲空,但是適配器將會。