我想通过单击按钮从片段导航到另一个片段,我也想传递数据。我应该为此做些什么?
答案 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);
}