ViewPager+Fragment,某个Fragment里面的一条数据发生变化,如何局部刷新这条数据
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
ViewPagerの項目がFragmentの場合、通常はAdapterとしてFragmentPagerAdapterが使用され、Fragmentを追加する際にこのクラスがタグを追加します。ソース内のFragmentPagerAdapterメソッドinstantiateItem()を参照してください。
ViewPager
Fragment
FragmentPagerAdapter
instantiateItem()
このタグは makeFragmentName() のプライベート メソッドを通じて取得されますが、必要なのはこのメソッドを直接コピーすることだけです。このメソッドのパラメーター viewId は ViewPager の ID である必要があり、itemId は getItemId() メソッドです。アダプターのタグを自分で組み立てて、フラグメントを取得できます。これで完了です。
makeFragmentName()
getItemId()
RecyclerView を使用すると、次のように Eventbus を使用できます
私もこの問題についてしばらく考えていましたが、検索した結果、適切な解決策が見つかりませんでした。pagerfragmentadapter は、対応するフラグメントを取得するための API を提供していないようです。 インデックス内に弱参照のリストを作成し、フラグメントの初期化時にアダプターに追加してから、アダプターの onDestroyItem (おそらくこれと呼ばれた?思い出せません) を書き換えて、リスト内の対応するエントリを削除しました。ここ。 フラグメントインスタンスを取得した後は、自由に操作できます。
フラグメントがフォアグラウンドにある場合、LocalBroadcastManager / EventBus / otto / Rx を使用してイベント (メッセージ) をサブスクライブできます
フラグメントがバックグラウンドに切り替わったら、サブスクリプションをキャンセルし、フラグメントが再びフォアグラウンドに切り替わったら、ページ データを更新して再サブスクライブします
のコード リーリーViewPager
の項目がFragment
の場合、通常はAdapterとしてFragmentPagerAdapter
が使用され、Fragment
を追加する際にこのクラスがタグを追加します。ソース内のFragmentPagerAdapter
メソッドinstantiateItem()
を参照してください。このタグは
makeFragmentName()
のプライベート メソッドを通じて取得されますが、必要なのはこのメソッドを直接コピーすることだけです。このメソッドのパラメーター viewId はViewPager
の ID である必要があり、itemId はgetItemId()
メソッドです。アダプターのタグを自分で組み立てて、フラグメントを取得できます。これで完了です。
RecyclerView を使用すると、次のように Eventbus を使用できます
リーリー私もこの問題についてしばらく考えていましたが、検索した結果、適切な解決策が見つかりませんでした。pagerfragmentadapter は、対応するフラグメントを取得するための API を提供していないようです。
インデックス内に弱参照のリストを作成し、フラグメントの初期化時にアダプターに追加してから、アダプターの onDestroyItem (おそらくこれと呼ばれた?思い出せません) を書き換えて、リスト内の対応するエントリを削除しました。ここ。
フラグメントインスタンスを取得した後は、自由に操作できます。
フラグメントがフォアグラウンドにある場合、LocalBroadcastManager / EventBus / otto / Rx を使用してイベント (メッセージ) をサブスクライブできます
フラグメントがバックグラウンドに切り替わったら、サブスクリプションをキャンセルし、フラグメントが再びフォアグラウンドに切り替わったら、ページ データを更新して再サブスクライブします