私は過去数日間検索してきましたが、成功しなかったので、誰かが答えてくれることを期待してこの質問を投稿しています.
セットアップ (android-support-library-v4、リビジョン 12 を使用):
ViewPager を使用したメイン アクティビティが 1 つあります。
ListViewで構成されるDataFragmentClassと呼ばれる1つのフラグメントクラスがあります。このフラグメント クラスは、データをインターネットから非同期的に読み込み、リストビューに表示します。ただし、このフラグメント クラスは、DataTypeA および DataTypeB と呼ばれる 2 種類のデータをロードできます。
私がしていることは、次のように、メイン アクティビティでこのフラグメントの 2 つのインスタンスを作成することです。
Fragment[] mFragmentList = new Fragment[2];
mFragmentList[0] = DataFragmentClass.newInstance(Modes.DataTypeA);
mFragmentList[1] = DataFragmentClass.newInstance(Modes.DataTypeB);
次に、この配列を ViewPager に渡します。これは正常に動作します。
作成後、フラグメントはデータの非同期ロードを開始します。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.genericlistview, container, false);
DataProvider mDataProvider = new DataProvider(this.getActivity());
mDataProvider.addListener(mDataResponseAdapter);
return view;
}
最初のデータ ロードは問題ありません。DataTypeA は Fragment1 にロードされ、DataTypeB は Fragment2 にロードされます。
ただし、後続のロードでは、データが「こぼれる」ことになります。すべてのデータ (タイプ A および B) が Fragment2 にロードされます。
問題を ListView の更新に絞り込みました。
私がすることは:
Runnable updateListView = new Runnable(){
@Override
public void run() {
adapter.add(myNewData);
adapter.notifyDataSetChanged();
}
};
DataFragmentClass.this.getActivity().runOnUiThread(updateListView);
次の点で何か問題があると思います。
- ランナブルを UI スレッドに投稿するとき。
- リモートサーバーがデータを返すとき。
どんな提案でも本当に役に立ちます。ありがとう!