0

Android アクション バー タブの 1 つのタブ内に 2 つの異なるフラグメントを表示したいと思います。

私がすることは次のようなものです:

public class Frag1 extends Fragment { 

   @Override
   public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) {

    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.frag1_menu, menu);
    }

    @Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

    case R.id.item1:
               break;
            case R.id.item_GoToFrag2:
                    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
        ft.remove(Frag1.this); 

                    Fragment mFragment = Fragment.instantiate(getActivity(), Frag2.class.getName(), null);             
        ft.add(android.R.id.content, mFragment, Frag2.class.getName() ); 
        ft.commit();
               break;
            } 
    return true;
}
}

Frag2 のコードはまったく同じです。一意の違いは、次のようなケースがある onOptionsItemSelected にあります。

            case R.id.item_GoToFrag1:
                    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
        ft.remove(Frag2.this); 

                    Fragment mFragment = Fragment.instantiate(getActivity(), Frag2.class.getName(), null);             
        ft.add(android.R.id.content, mFragment, Frag1.class.getName() ); 
        ft.commit();
               break;

問題は、別のタブに切り替えると、Frag2に関連するアイコンが他のすべてのタブに表示されたままになり、その理由が本当にわからないことです.getActivity().invalidateOptionsMenu( ); しかし、成功しませんでした....誰かが私を助けることができますか?

4

2 に答える 2

0

単にフラグメントを置き換えようとしている場合は、ft.replaceを呼び出します

また、なぜこれを行うのですか?

Fragment mFragment = Fragment.instantiate(getActivity(), Frag2.class.getName(), null);             
        ft.add(android.R.id.content, mFragment, Frag1.class.getName() ); 

Frag2 を追加してから、ft.add で Frag1 としてタグ付けします。

于 2012-06-21T02:09:02.813 に答える
0

XML ファイルにフラグメントを追加しないでください。コンテナを作成し、フラグメントをプログラムで配置するだけです。

于 2012-11-01T21:12:01.187 に答える