ViewPager+Fragment,某个Fragment里面的一条数据发生变化,如何局部刷新这条数据
巴扎黑2017-04-17 17:44:05
ViewPager
の項目がFragment
の場合、通常はAdapterとしてFragmentPagerAdapter
が使用され、Fragment
を追加する際にこのクラスがタグを追加します。ソース内のFragmentPagerAdapter
メソッドinstantiateItem()
を参照してください。
このタグは makeFragmentName()
のプライベート メソッドを通じて取得されますが、必要なのはこのメソッドを直接コピーすることだけです。このメソッドのパラメーター viewId は ViewPager
の ID である必要があり、itemId は getItemId()
メソッドです。アダプターのタグを自分で組み立てて、フラグメントを取得できます。
これで完了です。
ringa_lee2017-04-17 17:44:05
私もこの問題についてしばらく考えていましたが、検索した結果、適切な解決策が見つかりませんでした。pagerfragmentadapter は、対応するフラグメントを取得するための API を提供していないようです。
インデックス内に弱参照のリストを作成し、フラグメントの初期化時にアダプターに追加してから、アダプターの onDestroyItem (おそらくこれと呼ばれた?思い出せません) を書き換えて、リスト内の対応するエントリを削除しました。ここ。
フラグメントインスタンスを取得した後は、自由に操作できます。
天蓬老师2017-04-17 17:44:05
フラグメントがフォアグラウンドにある場合、LocalBroadcastManager / EventBus / otto / Rx を使用してイベント (メッセージ) をサブスクライブできます
フラグメントがバックグラウンドに切り替わったら、サブスクリプションをキャンセルし、フラグメントが再びフォアグラウンドに切り替わったら、ページ データを更新して再サブスクライブします