web-dev-qa-db-ja.com

別のフラグメントから新しいフラグメントを開くにはどうすればよいですか?

フラグメント間をナビゲートしてみました。新しいフラグメントが機能するNewFragment.Javaを取得しました。私の問題は:

onClickListenerを実行するNewFragment.Javaを正しく実行するにはどうすればよいですか?

button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

        Intent i = new Intent(getActivity(), NewFragment.class);
        startActivity(i);

    }
});

参考までに、これはフラグメントの内部からのものです(それが重要かどうかはわかりません)。

58
HultBullt

クリックリスナー関数に次のコードを追加し、

NextFragment nextFrag= new NextFragment();
getActivity().getSupportFragmentManager().beginTransaction()
             .replace(R.id.Layout_container, nextFrag, "findThisFragment")
             .addToBackStack(null)
             .commit();

文字列"findThisFragment"は、必要に応じて後でフラグメントを見つけるために使用できます。

110
Narendra

これは@Narendraのコードのより詳細なコードです。

最初に、2番目のフラグメントのインスタンスが必要です。次に、FragmentManagerおよびFragmentTransactionのオブジェクトが必要です。完全なコードは次のとおりです。

Fragment2 fragment2=new Fragment2();
FragmentManager fragmentManager=getActivity().getFragmentManager();
FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.content_main,fragment2,"tag");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

これがうまくいくことを願っています。 getFragmentManager()の代わりにgetSupportFragmentManager()を取得する場合があります。

5
Nipuna Dilhara

アクティビティ内に関数を作成して新しいフラグメントを開き、アクティビティ参照をフラグメントに渡し、フラグメント内の何らかのイベントでこの関数を呼び出す必要があります。

3
vipul mittal
@Override
public void onListItemClick(ListView l, View v, int pos, long id) {
    super.onListItemClick(l, v, pos, id);
    UserResult nextFrag= new UserResult();
    this.getFragmentManager().beginTransaction()
    .replace(R.id.content_frame, nextFrag, null)
    .addToBackStack(null)
    .commit();  
}
2
Vinod Joshi

これを使って、

AppCompatActivity activity = (AppCompatActivity) view.getContext();
Fragment myFragment = new MyFragment();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, myFragment).addToBackStack(null).commit();
1
 Fragment fr = new Fragment_class();
             FragmentManager fm = getFragmentManager();
            FragmentTransaction fragmentTransaction = fm.beginTransaction();
            fragmentTransaction.add(R.id.viewpagerId, fr);
            fragmentTransaction.commit();

正確には、R.id.viewpagerIdが現在のクラスレイアウトに作成され、呼び出し時に新しいフラグメントが自動的に浸透します。

0
Mbanda

@Narendraソリューションに追加しています...

重要:フラグメントを操作する場合、ナビゲーションはホストの操作性に密接に関連しているため、ホストアクティビティにそのフラグメントクラスを実装しないと、フラグメントからフラグメントにジャンプすることはできません。

サンプル:

public class MyHostActivity extends AppCompatActivity implements MyFragmentOne.OnFragmentInteractionListener {

また、ホストアクティビティに次のオーバーライド機能があることを確認します。

@Override public void onFragmentInteraction(Uri uri) {}これがお役に立てば幸いです...

0
Gerry R