1

我正在尝试处理我的 Android 应用程序上的方向更改。我在方向改变后尝试为我的 ListFragment 设置适配器时遇到了问题。没有例外,但列表仍然是空的;它没有填充给定的数据。

我知道在方向更改时会重新创建整个活动。我还实现了一种将数据从旧方向传递到新方向的方法。我已经检查过,就在调用 ListFragment.setAdapter() 之前,数据的 ArrayList 不为空,并且它包含与以前完全相同的数据。我也确信我的自定义适配器类没有缺陷,因为它第一次完美地填充了列表。

另外,我的目标设备低于 3.0,所以我用android.support.v4.app.ListFragment它来实现我的 ListFragment。

这是我的 onCreate() 方法:

private ListFragment fragmentA;
private ListFragment fragmentB;
@Override
public void onCreate(Bundle savedInstance) {
    super.onCreate(savedInstance);
    setContentView(R.layout.my_activity);

    ActionBar bar = getSupportActionBar();
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    ActionBar.Tab tabA = bar.newTab().setText("TabA");
    ActionBar.Tab tabB = bar.newTab().setText("TabB");

    fragmentA = new MyListFragment();
    fragmentB = new MyListFragment();

    Object retained = getLastCustomNonConfigurationInstance();
    if (retained instanceof MyAsyncTask) {
        ResultWrapper result = ((MyAsyncTask) retained).getResult();
        Log.d("MyActivity", "retained is instance of MyAsyncTask");
        if (result.nowResult == null) {
            Log.d("MyActivity", "null");
        } else {
            Log.d("MyActivity", "nowResult size" + result.nowResult.size());
            fragmentA.setListAdapter(new MyListAdapter(this,
                R.layout.my_list_item, result.nowResult));
        }
        fragmentB.setListAdapter(new MyListAdapter(this,
                R.layout.my_list_item, result.myResult));
    } else {
        fetcher = new MyAsyncTask(this);
        fetcher.execute();
    }

    tabA.setTabListener(new MyTabListener(fragmentA));
    tabB.setTabListener(new MyTabListener(fragmentB));

    bar.addTab(tabA);
    bar.addTab(tabB);

}

任何帮助,将不胜感激。

4

1 回答 1

0

可能没有调用您的 getView 方法。要解决此问题,请在 ListFragment 中调用: setListShown(true)。使用兼容性库时,您有义务这样做。

亲切的问候,布拉姆

于 2011-12-29T14:21:26.150 回答