我想通过单击按钮从一个片段导航到另一个片段,并且我还想传递数据。我应该为此做些什么?
问问题
35206 次
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
所有 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 回答