3

単一のタブ内で複数のフラグメントを使用したい。私のタブの活動は拡張しSherlockFragmentActivityます。

メソッドの最初のタブに最初のフラグメントを追加しますonTabChanged()。そして、最初のタブの最初のフラグメント内から別のフラグメントを置き換えます。しかし、2番目のタブに移動してから最初のタブを再度開くと、最初のタブの状態が維持されず、最初のタブの2番目のフラグメントではなく最初のフラグメントが表示されます。

単一のタブ内でフラグメントのステークを維持する方法と、単一のタブ内で既存のフラグメント フロントをポップアップする方法について助けが必要です。

どんな体でも考えがありますか?

4

2 に答える 2

1

2 つのタブを使用している場合は、タブごとに 2 つのフラグメントを個別に維持する必要があります。つまり、tab1 には FragmentA を、tab2 には FragmentB を、 FragmentA の xml には FragmentB に、FrgmentTransaction に FrameLayout が必要です。

FragmentA の xml、すなわち frag_a.xml :

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragmentA_container"
android:layout_width="match_parent"
android:layout_height="match_parent" >

</FrameLayout>

FragmentB の xml、すなわち frag_b.xml :

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragmentB_container"
android:layout_width="match_parent"
android:layout_height="match_parent" >

</FrameLayout>

Tab1 については、常に R.id.fragmentA_container を使用してトランザクションを実行します。つまり、最初のタブの最初のフラグメント (FragmentA) 内の別のフラグメントを置き換えます。以下のコードのように

FragmentA:

Fragment fragment = new YourFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
getSupportFragmentManager().popBackStack();
fragment.setArguments(null);
ft.replace(R.id.fragmentA_container, fragment);
ft.commit();

Tab2 では、常に R.id.fragmentB_container を使用してトランザクションを実行します。つまり、2 番目のタブの secondfragment(FragmentB) 内の別のフラグメントを置き換えます。以下のコードのように

FragmentB:

Fragment fragment = new YourFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
getSupportFragmentManager().popBackStack();
fragment.setArguments(null);
ft.replace(R.id.fragmentB_container, fragment);
ft.commit();
于 2013-07-26T06:01:42.357 に答える
0

アクティビティで複数のフラグメントを管理するためのサンプル コードを次に示します。

public class MainActivity extends FragmentActivity {

private FragmentManager fragmentManager;
Fragment currentFragment;
Fragment1 initialFragment;
Fragment2 nextFragment;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
    fragmentManager = getSupportFragmentManager();
    initialFragment = (Fragment1) fragmentManager.findFragmentById(R.id.initial_fragment);
    nextFragment = (Fragment2) fragmentManager.findFragmentById(R.id.next_fragment);
    nextFragment();
}

public void onNext(View v) {
    // User pressed next button on initial fragment
    showNextFragment();
}

private void showFragment(Fragment fragmentToShow) {
    Fragment[] fragments = { initialFragment, nextFragment /*... */ };
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    for(Fragment fragment : fragments) {
        if(fragment != fragmentToShow) {
            fragmentTransaction.hide(fragment);
        }
    }
    fragmentTransaction.show(fragmentToShow);
    fragmentTransaction.commit();
}

private void showInitialFragment() {
    currentFragment = initialFragment;
    showFragment(currentFragment);
}

private void showNextFragment() {
    currentFragment = nextFragment;
    showFragment(currentFragment);
}

}
于 2013-07-25T09:52:11.083 に答える