19

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

4

4 回答 4

24

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

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>
于 2013-01-11T21:53:03.877 回答
4

阅读有关此主题的 Android 文档

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

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

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

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

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

于 2017-10-31T16:09:49.123 回答
2
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();
于 2018-10-03T04:48:14.697 回答
0

试试看:

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

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);
}
于 2021-02-11T22:28:12.013 回答