私は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つの同じフラグメントを作成したくありません。異なるプレゼンターと同じフラグメント
0
A
答えて
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);
}
}
活動は、アンドロイドのためのプレゼンター/コントローラであるので、私は今のプレゼンタークラスを定義するのではなく、ここにロジックを先に行くとしています。各タブでは、表示するビューを制御できます。あなたのフラグメントが破壊されたかどうかは私がコメントすることはできませんので、私はあなたのフラグメントの移行を実行しているコードが表示されません。
関連する問題
- 1. 異なるフラグメントの同じフローティングアクションボタン
- 2. 同じフラグメントの異なるインスタンス間で通信する
- 3. 異なるタブでリストビューを使用した同じフラグメント
- 4. 同じアクティビティのフラグメント内の異なるonKeyDownの使い方
- 5. プレゼンター:setRetainInstance(true)フラグメントで非同期処理を開始するタイミング
- 6. ViewPagerフラグメント(MVP)のプレゼンターを回復する
- 7. Azure異なるリソースグループと同じvnetの同じVM名
- 8. 同じPythonインストールのパッケージと同じスクリプトの異なるバージョン
- 9. CoreGraphicsと同じコードが異なる
- 10. 同じクラスの異なるパッケージとJAXB
- 11. 異なるタイプのデータベースと同じコード
- 12. offsetWidth:異なることが、同じ
- 13. 同じブラウザ。同じウィンドウのバージョン。同じスタイル。異なるフォントレンダリング
- 14. 同じクエリ、異なるパフォーマンス
- 15. 異なるURL /同じサーバー
- 16. 同じコンポーネント、異なるスタイル
- 17. 異なるルート同じコンポーネント
- 18. 同じパターン異なるルート
- 19. Xamarin SignalR - 異なるフラグメント/アクティビティで同じ接続プロキシを使用する
- 20. SupportMapFragmentの2つの異なるアクティビティは同じフラグメントを共有します
- 21. 同じアクティビティと同じ画面の2つのフラグメント
- 22. 同じクエリ、異なるDB、同じDB構造、同じDBサーバー、異なる実行計画
- 23. 異なるテーブルの同じデータが同じビューにある
- 24. 同じアクティビティでフラグメントを切り替えると同じフラグメントが再開されます
- 25. 同じオペランド同じコードの同じマシン内の異なる結果
- 26. AngularJSの同じページに異なるコントローラを持つ同じテンプレート
- 27. 同じブラウザの同じページの異なるビューポートの幅
- 28. 同じコード、同じブラウザ、ユーザーの異なる動作
- 29. 同じバイナリで同じタイプの異なるレイアウト
- 30. 同じサーバー、同じファイル、異なるMIMEタイプ
オプションありがとうございます。フラグメントトランザクションの場合、私はViewPagerを使用します。プレゼンターとしてのアクティビティを使うのが良いアイデアなのかどうか分かりませんが、私はそれをgoogleにします –
フラグメントは機能しますが、ブルームーンで一度クラッシュするケースがあります。残念ながら、アンドロイドソースを編集することはできませんので修正してください。参考までにhttps://stackoverflow.com/questions/18710561/can-i-use-view-pager-with-views-not-with-fragmentsをご覧ください。大企業では、lyftなどの軽いアクティビティをMVCパターンhttps://github.com/lyft/scoopで構築しているので意味があります。小規模なプロジェクトでは、データをビューにバインドするためのアクティビティをプレゼンタ/コントローラにすることを強くお勧めします。 –
GoogleエンジニアのDianne Hackborn https://plus.google.com/+DianneHackborn/posts/FXCCYxepsDUで表現されているようなアーキテクチャについては、「正しい」答えはありませんがMVC/MVP/MVVMに関しては –