如何从另一个片段打开一个新片段?

Hul*_*llt 63 android android-fragments android-button onclicklistener

我尝试在片段之间进行导航.我有NewFragment.java新的片段工作了.我的问题是:

如何正确onClickListener运行NewFragment.java

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

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

    }
});
Run Code Online (Sandbox Code Playgroud)

仅供参考:这是来自一个片段(我不知道这是否重要).

小智 120

在点击监听功能中添加以下代码,

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

"findThisFragment"如果需要,可以使用该字符串稍后查找该片段.

  • 什么是`Layout_container`? (5认同)
  • Layout_container是当前片段的ID。我建议使用((ViewGroup).getView()。getParent())。getId()而不是R.id.Layout_container。 (3认同)
  • @BTRNaidu应该是:((ViewGroup)getView()。getParent())。getId(); (3认同)
  • 谁能澄清`Layout_container`应该是什么? (2认同)
  • Kotlin 版本:((view as ViewGroup).parent as View).id (2认同)

Nip*_*ara 8

这是@ Narendra代码的更多描述代码,

首先,您需要第二个片段的实例.那么你应该有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();
Run Code Online (Sandbox Code Playgroud)

希望这会奏效.有时你可能得到getSupportFragmentManager()而不是getFragmentManager().

  • @HuwDavies 宿主 Activity 布局文件中 id 父视图的值。示例: <FrameLayout android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="match_parent" /> (2认同)

Par*_*sha 6

用这个,

AppCompatActivity activity = (AppCompatActivity) view.getContext();
Fragment myFragment = new MyFragment();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, myFragment).addToBackStack(null).commit();
Run Code Online (Sandbox Code Playgroud)


vip*_*tal 5

您应该在活动内创建一个函数来打开新片段并将活动引用传递给片段,并在片段内的某些事件上调用此函数。

  • 从片段内部,您会自动获得对父活动的引用。使用 getActivity() 或者如果使用 onAttach,则活动位于参数中。 (3认同)