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 に答える