tablayout+viewpager+fragment实现的下图的效果,怎么在各个Fragment中传递数据并刷新界面?
如图中,点击“菜单”中的按钮,如何在购物车中接收并刷新界面。
阿神2017-04-17 15:02:42
フラグメントがすでに存在する場合、fragment.setArguments(bundle)
経由でパラメータを渡そうとすると例外が発生します:
Fragment を更新する私の一般的な方法は、Fragment のパブリック メソッドを定義することです。
リーリー次に、更新する必要があるフラグメントを取得し、このメソッドを呼び出します。
フラグメントが 4 つしかないことを考慮すると、配列またはリストを使用して、これら 4 つのフラグメントのインスタンスをアクティビティに保存してみることができます (この方法は比較的愚かです)。
そして、FragmentPagerAdapter
でページを切り替えるときにフラグメント インスタンスが破壊されないように、FragmentStatePagerAdapter
の代わりに ViewPager
を使用する必要があります。 ViewPager
PHPz2017-04-17 15:02:42
プロキシ モードを使用して、リバース バリュー転送を実装します。
アクティビティは、これらのフラグメントの親セットに相当します (フラグメントはすべてアクティビティ内で新しいため) アクティビティ内でこれらのフラグメントを操作するのは非常に簡単です。したがって、フラグメントの 1 つがアクティビティを取得できる場合。他のフラグメントを簡単に操作できます。
最も簡単な方法は、フラグメントにアクティビティ属性を追加することです。アクティビティ内で新しいフラグメントが作成されたら、 activity.this をフラグメントに渡します。
しかし、一般的にはアクティビティに XXDelegate などのインターフェースを実装させ、フラグメントのコンストラクターには XXDelagate を持たせます。アクティビティの作成時にこれ (アクティビティ自体) を渡すだけです。
大家讲道理2017-04-17 15:02:42
2 つのフラグメント間を移動するときに、バンドルを使用してパラメータを取得できます。 getArguments().getString("key"); を使用するだけで、キーを自分で定義できます。バンドルを渡すことができる限り、識別子とパラメーターの形式を実装できます。この原則は基本的にアクティビティ
と同じです。例:
Bundlebundle=new Bundle();
bundle.putString( "key", Projsid) ;
fragment.setArguments(bundle); flagment.commit();