1

タブレット専用のシンプルなAndroidアプリを開発しており、Android 4.0を使用しています。私のアプリケーションには、次のようなメイン画面があります。

ここに画像の説明を入力

メイン アクティビティの Oncreate() 次のコードを使用して、main.xml にフラグメント A を追加しています。

FragmentTransaction ft = getFragmentManager().beginTransaction();
Fragment imageFragment = new ImageFragment();
ft.replace(R.id.fragment_container, imageFragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();

このフラグメント A には、クリック可能な画像ビューしかありません。ここで、ユーザーが画像ビューをクリックすると、別のフラグメント (フラグメント B) が呼び出され、画像ビューが置き換えられるようにしたいと考えています。フラグメント B には、ビデオを再生する VideoView があります。

したがって、私の2番目の画面は次のようになります。

ここに画像の説明を入力

私の問題は、「メイン画面のアクティビティで最初のフラグメントから2番目のフラグメントを呼び出す方法は?」

さまざまなアクティビティを使用できますが、そうしたくなくて、フラグメントを使用してこれを実行したいだけです。

私を案内してください。

4

2 に答える 2

4

これは最も簡単な方法です:

1) 内部YourActivityでメソッドを作成します。

public void goToSecondFragment(){}
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    Fragment secondFragment = new SecondFragment();
    ft.replace(R.id.fragment_container, secondFragment);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    ft.addToBackStack(null);
    ft.commit();
}

2) 最初のフラグメントで、それを置き換えたい場合は、次のように呼び出します。

YourActivity activity = (YourActivity) getActivity();
activity.goToSecondFragment();
于 2013-04-09T09:05:01.337 に答える
0

以下を使用して同じことができます。

バックスタックを維持しながらフラグメントを追加する

FragmentManager supportFragmentManager = getSupportFragmentManager();
supportFragmentManager.addOnBackStackChangedListener(new OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
}
}); 
FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragmentTransaction.addToBackStack("fragmentTag");
fragmentTransaction.replace(R.id.slate, fragment, "fragmentTag");
fragmentTransaction.commit();

フラグメントの置換

FragmentManager supportFragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragmentTransaction.replace(R.id.slate, fragment, "fragmentTag");
fragmentTransaction.commit();

あなたのために働くはずです。

于 2013-04-09T08:59:24.373 に答える