2

FragmentTabHost プロジェクトのサンプルがあります。そして、プロジェクトに必要ないくつかの変更を加えました。私のタブバー xml (bottom_tabs.xml)

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <FrameLayout
        android:id="@+id/realtabcontent"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1" />

    <android.support.v4.app.FragmentTabHost
        android:id="@android:id/tabhost"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="0" />
    </android.support.v4.app.FragmentTabHost>

</LinearLayout>

ここに画像の説明を入力 ここに画像の説明を入力 ここに画像の説明を入力

oncreate() - FragmentActivity

mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
        mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);

        Bundle b = new Bundle();
        b.putString("key", "Simple");
        mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"),
                Fragment1.class, b);
        //
        b = new Bundle();
        b.putString("key", "Contacts");
        mTabHost.addTab(mTabHost.newTabSpec("contacts")
                .setIndicator("Contacts"), Fragment2.class, b);
        b = new Bundle();
        b.putString("key", "Custom");
        mTabHost.addTab(mTabHost.newTabSpec("custom").setIndicator("Custom"),
                Fragment3.class, b);

ここに画像の説明を入力

Fragment3 クラス

public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_3,
                null);  
        Button b = (Button) root.findViewById(R.id.button1);
        b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                 Fragment f;
                    f = (Fragment) new Fragment4();
                    FragmentTransaction ft = getFragmentManager().beginTransaction();
                    ft.replace(R.id.realtabcontent, f);
                    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                    ft.addToBackStack(null);
                   ft.commit();
            }
        });
        return root;
    }

ここに画像の説明を入力 ここに画像の説明を入力

問題点: **

  • 1) Fragment3 で goto1 ボタンを押すと、Fragment4 にリダイレクトされます。問題ない

  • 2) 次にタブを押すと、すべての画面で Fragment4 のレイアウトが重なっています

  • 3) goto 2nd tab ボタンを押すと、Fragment2 にリダイレクトする方法と同時に 2nd タブが強調表示されます。

**

これを行うための最良の方法を教えてください。

4

1 に答える 1

0

タブを変更するには、自分自身FragmentTabHost.setCurrentTab()を使用する代わりにメソッドを使用する必要があります(内部で処理されます)。Fragment4 が重なって表示されるのは、タブを変更しても削除されないためです。FragmentTransaction

これが起こっていることです:

  1. タブ 3 に移動します。
  2. フラグメント 4 に移動ボタンを押すと、コードでフラグメント 3 がフラグメント 4 に置き換えられます。
  3. 別のタブ インジケーターを押します。これにより、FragmentTabHost は現在のフラグメント(まだ Fragment3 であると認識しています)を削除し、新しい Fragment を追加します。手動で追加した Fragment4 はまだそこにあります。これを回避するには、タブ変更イベントのリスナーを追加し、存在する場合は Fragment4 を明示的に削除します。または、Fragment4 を Fragment3 の子フラグメントとして追加することもできます。そうすれば、Tab3 を離れると消え、Tab3 に戻ると再び表示されます。それはあなたが何を達成しようとしているかにかかっています。
于 2014-03-20T01:30:17.673 に答える