从后台更新Android Fragment的ListView

时间:2012-08-09 18:14:03

标签: android asynchronous android-listview android-fragments

过去几天我一直在寻找,但没有成功,所以我发布这个问题,希望有人能回答。

设置(使用android-support-library-v4,修订版12):

我有一个ViewPager的主要活动。

我有1个Fragment类,名为DataFragmentClass,由ListView组成。 此片段类以异步方式从Internet加载数据并将其显示在列表视图中。但是,此片段类可以加载两种类型的数据,称为DataTypeA和DataTypeB。

我所做的是在我的主要活动中创建这个片段的两个实例,如下所示:

Fragment[] mFragmentList = new Fragment[2];
mFragmentList[0] = DataFragmentClass.newInstance(Modes.DataTypeA);
mFragmentList[1] = DataFragmentClass.newInstance(Modes.DataTypeB);

然后我将这个数组传递给我的ViewPager,它工作正常。

创建后,Fragments将开始异步加载数据:

    @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线程上发布runnable时。
  2. 当远程服务器返回数据时。
  3. 任何建议都会非常有用。谢谢!

0 个答案:

没有答案