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

时间:2013-01-11 21:40:31

标签: android

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

4 个答案:

答案 0 :(得分:17)

这是一个帮助你的例子:

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>

答案 1 :(得分:0)

阅读Android documentation on this subject

  

所有片段到片段的通信都是通过关联的Activity完成的。 两个碎片不应该直接通信。

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

为了解决您的具体情况,您的活动将实现如下界面:

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

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

答案 2 :(得分:0)

{{1}}

答案 3 :(得分: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);
}