【问题标题】:How to navigate from bottomsheetdialog to fragment using navigation?如何使用导航从 bottomsheetdialog 导航到片段?
【发布时间】:2020-01-11 16:34:00
【问题描述】:

我目前正在制作一个具有底页功能的应用程序,当用户点击对话框内的图标(图像视图)时,片段将显示。我的问题是我无法导航到片段 b,它返回了这个错误

这是我的家庭片段,活动启动时首先开始的片段

public class HomeFrag extends Fragment {

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_home, container, false);
    ImageView buttonOpenSheet = view.findViewById(R.id.buttonopensheet);

    buttonOpenSheet.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            BottomSheetDialog bottomsheet = new BottomSheetDialog();
            bottomsheet.show(getFragmentManager(), "bottomsheet");
        }
    });

    return view;
}}

bottomsheetdialog.java

public class BottomSheetDialog extends BottomSheetDialogFragment {

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    final View view = inflater.inflate(R.layout.bottom_sheet, container, false);

    //Views
    ImageView usual = view.findViewById(R.id.usual);
    final NavController navigator = 
Navigation.findNavController(getActivity(), R.id.fragment_host);

    usual.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            navigator.navigate(R.id.action_bottomSheetDialog_to_usualFrag);
            Log.d(TAG, "user clicked" );
        }
    });
    return view;
}}

这是我的导航

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/app_nav"
app:startDestination="@id/homeFrag">

<fragment
    android:id="@+id/homeFrag"
    android:name="com.bw.f22920.HomeFrag"
    android:label="fragment_home"
    tools:layout="@layout/fragment_home" />

<dialog
    android:id="@+id/bottomSheetDialog"
    android:name="com.bw.f22920.BottomSheetDialog"
    android:label="bottom_sheet"
    tools:layout="@layout/bottom_sheet">
    <action
        android:id="@+id/action_bottomSheetDialog_to_usualFrag"
        app:destination="@id/usualFrag" />
</dialog>
<fragment
    android:id="@+id/usualFrag"
    android:name="com.bw.f22920.UsualFrag"
    android:label="fragment_usual"
    tools:layout="@layout/fragment_usual" />


</navigation>

【问题讨论】:

    标签: android uinavigationcontroller android-jetpack navigationcontroller


    【解决方案1】:

    你正在使用

    @Override
    public void onClick(View v) {
        BottomSheetDialog bottomsheet = new BottomSheetDialog();
        bottomsheet.show(getFragmentManager(), "bottomsheet");
    }
    

    这意味着 NavController 不知道您当前的目的地已更改为底部工作表对话框。

    您需要拨打navigate():

    @Override
    public void onClick(View v) {
        Navigation.findNavController(v).navigate(R.id.bottomSheetDialog);
    }
    

    【讨论】:

    • 如何在使用导航控制器显示时关闭此底部工作表?
    • navController.popBackStack() 将关闭对话目标。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多