2017-07-28 7 views
0

私は3つのタブを持つアクティビティを持っています:A、B & C.すべてのタブについて、フラグメント(-f)とプレゼンター(-p)を作成しました。問題は、3つのフラグメント(A-f、B-f、C-f)はすべて同じであるが、プレゼンターは同じではないということである。ですから、問題はコードの重複を避けることができますか?私はBaseFragmentを作成し、それをAf、Bf、Cfから拡張しようとしましたが、私がAfで何かCf(UIアップデートのような)が発生した場合、Cfが破壊されたので java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setVisibility(int)' on a null object referenceを受け取ります私は同じレイアウトの3つの同じフラグメントを作成したくありません。異なるプレゼンターと同じフラグメント

答えて

1

私は似たようなことをしています。私はビューをもっとシンプルでバギーが少ないと感じました。さまざまなトランザクションを実行すると、アンドロイド・フラグメント・マネージャーが予測できない動作を示すことがあります。ここでは、それは働くことができる方法の簡単なサンプルです:

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); 
     } 
} 

活動は、アンドロイドのためのプレゼンター/コントローラであるので、私は今のプレゼンタークラスを定義するのではなく、ここにロジックを先に行くとしています。各タブでは、表示するビューを制御できます。あなたのフラグメントが破壊されたかどうかは私がコメントすることはできませんので、私はあなたのフラグメントの移行を実行しているコードが表示されません。

+0

オプションありがとうございます。フラグメントトランザクションの場合、私はViewPagerを使用します。プレゼンターとしてのアクティビティを使うのが良いアイデアなのかどうか分かりませんが、私はそれをgoogleにします –

+0

フラグメントは機能しますが、ブルームーンで一度クラッシュするケースがあります。残念ながら、アンドロイドソースを編集することはできませんので修正してください。参考までにhttps://stackoverflow.com/questions/18710561/can-i-use-view-pager-with-views-not-with-fragmentsをご覧ください。大企業では、lyftなどの軽いアクティビティをMVCパターンhttps://github.com/lyft/scoopで構築しているので意味があります。小規模なプロジェクトでは、データをビューにバインドするためのアクティビティをプレゼンタ/コントローラにすることを強くお勧めします。 –

+0

GoogleエンジニアのDianne Hackborn https://plus.google.com/+DianneHackborn/posts/FXCCYxepsDUで表現されているようなアーキテクチャについては、「正しい」答えはありませんがMVC/MVP/MVVMに関しては –

関連する問題