2017-07-28 84 views
0

我有一個活動帶有3個選項卡:A,B & C.對於每個選項卡,我創建了一個片段(-f)和演示者(-p)。問題是所有三個片段(A-f,B-f,C-f)是相同的,但演示者不是。所以問題是我如何避免代碼重複?我試圖創建一個BaseFragment並從Af,Bf,Cf擴展它,但是如果我在Af並且發生了某些事情(比如UI更新),那麼我會收到 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setVisibility(int)' on a null object reference,因爲在此處的Cf被銷燬(是I對吧?)我不想用相同的佈局創建3個相同的片段。帶有不同演示者的相同片段

回答

1

我做了類似的事情,我發現使用視圖更簡單和更少的錯誤。在執行各種事務時,android片段管理器可能會出現不可預知的行爲。下面是它如何工作的一個快速的樣品:

YourActivity extends Activity { 
     View a,b,c; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      a = getLayoutInflater().inflate(R.layout.YOUR_LAYOUT_ID, null); 
      b = getLayoutInflater().inflate(R.layout.YOUR_LAYOUT_ID, null); 
      c = getLayoutInflater().inflate(R.layout.YOUR_LAYOUT_ID, null); 
     } 
} 

活動是爲Android演示/控制器,所以我會在這裏,而不是繼續和有邏輯定義現在演示類的。在每個標籤頁上,您可以控制顯示哪個視圖。我沒有看到你正在執行片段轉換的代碼,所以我無法確定你的片段是否被破壞。

+0

感謝您的選擇。對於片段事務,我使用ViewPager。我不知道如果使用活動作爲主持人是一個好主意,我會谷歌它 –

+0

片段可以工作,但你會得到的情況下,你在藍色月亮一旦崩潰,不幸的是不會有一個修復,因爲你不能編輯android源代碼。請參閱https://stackoverflow.com/questions/18710561/can-i-use-view-pager-with-views-not-with-fragments以供參考。在較大的公司中,輕量級活動例如lyft是有意義的,因爲他們已經構建了一個MVC模式https://github.com/lyft/scoop。對於較小的項目,我強烈建議讓您的活動成爲展示者/控制者,將數據綁定到視圖。 –

+0

對於MVC/MVP/MVVM而言,Google工程師Dianne Hackborn表達的架構沒有「正確」的答案https://plus.google.com/+DianneHackborn/posts/FXCCYxepsDU –

相關問題