1

私は過去数日間検索してきましたが、成功しなかったので、誰かが答えてくれることを期待してこの質問を投稿しています.

セットアップ (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);

次の点で何か問題があると思います。

  1. ランナブルを UI スレッドに投稿するとき。
  2. リモートサーバーがデータを返すとき。

どんな提案でも本当に役に立ちます。ありがとう!

4

0 に答える 0