0

friendListFragmentlogListFragmentの2つのフラグメントがあります。

    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();

    FriendListFragment friendListFragment = (FriendListFragment)fm.findFragmentById(R.id.friend_list_fragment_container);
    LogListFragment logListFragment = (LogListFragment)fm.findFragmentById(R.id.log_list_fragment_container);

後者は、前者のonListItemClickイベントのコンテキストで作成されます。

    fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
    logListFragment = LogListFragment.newInstance(name);
    ft.add(R.id.log_list_fragment_container, logListFragment);
    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        ft.hide(friendListFragment);
    }
    ft.addToBackStack(null);
    ft.commit();

onListItemClickを呼び出すたびに、最初にバックスタックをクリアします。これは、バックスタックに最新のlogListFragmentのみが必要だからです。

私のアクティビティのonCreate関数では、電話の向きに注意を払っています。ポートレートモードでは、バックスタックをクリアし、次の方法でlogListFragmentを再度追加します。

    if ((logListFragment != null) && (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)) {
        fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
        ft.add(R.id.log_list_fragment_container, logListFragment);
        ft.hide(friendListFragment);
        ft.addToBackStack(null);
        ft.commit();
    }

その後、friendListFragmentは期待どおりに非表示になりますが、 logListFragmentも表示されません。次のようにコードを変更すると、期待どおりに機能します。

    if ((logListFragment != null) && (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)) {
        LogListFragment copy = new LogListFragment();
        copy.setArguments(logListFragment.getArguments());
        fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
        ft.add(R.id.log_list_fragment_container, copy); // <- use copy
        ft.hide(friendListFragment);
        ft.addToBackStack(null);
        ft.commit();
    }

LogListFragmentの新しいインスタンスを追加すると、機能します。

質問

  1. 新しいインスタンスを作成する必要があるのはなぜですか?
  2. 誰かがより良い解決策を知っていますか?
4

1 に答える 1

0

多分フラグメントを置き換える方が良いオプションですか?

ft。replace (int containerViewId、フラグメントフラグメント)

于 2013-02-21T14:12:08.380 に答える