繁体   English   中英

单击按钮从一个片段导航到另一个片段

[英]Navigate from one fragment to another on click of a button

我想通过单击按钮从一个片段导航到另一个片段,并且我还想传递数据。 我应该为此做些什么?

这是一个可以帮助您的示例:

your_button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {

                            Fragment frag = new YourFragment(Data yourdata);


                    FragmentTransaction ft = getFragmentManager().beginTransaction();
                    ft.replace(R.id.fragment_container, frag);
                    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                    ft.addToBackStack(null);
                    ft.commit();
                 }
     });

xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >


 <FrameLayout android:name="fragments.YourInitialFragment"
            android:id="@+id/fragment_container"
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="0dip" />

</LinearLayout>

阅读有关此主题的 Android 文档

所有 Fragment 到 Fragment 的通信都是通过关联的 Activity 完成的。 两个 Fragment 永远不应该直接通信。

事实上,如果您使用 Android Studio 模板添加片段,它将使用接口添加实现本文中描述的模式的模板代码。

为了解决您的特定场景,您的活动将实现如下接口:

public interface OnFragmentInteractionListener
{
    void onButtonClick(Data data);
}

然后在该方法的实现中,活动可以使用FragmentManager执行导航,如另一个答案中所示。 这篇文章对这个过程给出了更详细的解释。

Fragment fragment =null;
switch (view.getId()) {
                   case R.id.fragMentOneLayout:
                        fragment = new FragMentOne();
                        break;
                    case R.id.fragMentTwoLayout:
                        fragment = new FragMentTwo();
                        break;

                }



 FragmentManager fm = getFragmentManager();
// create a FragmentTransaction to begin the transaction and replace the Fragment
FragmentTransaction fragmentTransaction = fm.beginTransaction();
// replace the FrameLayout with new Fragment
fragmentTransaction.replace(R.id.frameLayout, fragment);
fragmentTransaction.commit();

试试看:

为按钮创建一个点击监听器,例如:

mybutton.setOnClickListener(view -> clickExecuted());

获取控制器(如果没有):

private NavController getNavController() {
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.mainactivity_slide_navigation_datalayout_fragment);
    if (!(fragment instanceof NavHostFragment)) {
        throw new IllegalStateException("Activity " + this + " does not have a NavHostFragment");
    }
    return ((NavHostFragment) fragment).getNavController();
}

然后导航:

public void clickExecuted() {
    navController.navigate(R.id.destination_fragment);
}

通过使用 Android 导航组件。

  1. 首先在 nav_graph.xml 中映射您的目标片段

  2. 然后使用下面的代码导航

     findNavController().navigate(R.id.action_FragmentA_to_FragmentB)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM