android-fragments 是否可以从片段内部关闭FragmentContainerView?

d6kp6zgx  于 2022-11-14  发布在  Android
关注(0)|答案(1)|浏览(130)

这是我第一次使用Fragments,我对Android还是个新手。我正在使用Fragments来管理我的应用程序的设置菜单。
我有一个带有FragmentContainerView的MainActivity,XML是这样的:

<androidx.fragment.app.FragmentContainerView
            android:visibility="gone"
            android:id="@+id/main_activity_fragment_container"
            android:background="@color/white"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"/>

在MainActivity.java文件中,我为一个按钮分配了一个方法,以使FragmentContainerView可见,如下所示:

private void showFragments(FragmentContainerView fragmentContainerView) {

    fragmentContainerView.setVisibility(View.VISIBLE);
    // There is more to this method, but I don't think it is necessary for this example
}

我可以在所有设置菜单中导航:膨胀片段、替换片段、更新共享首选项、使用浏览器意图等--我需要为设置菜单做的一切。
我还没弄清楚的是如何在选择完成后关闭设置菜单(关闭MainActivity中的FragmentContainerView)(从而返回游戏)。我可以在每个片段中创建一个“关闭”按钮--但我不能弄清楚关闭MainActivity的FragmentContainerView的方法(将可见性设置为GONE)。

***一旦我在片段中-是否有可能访问片段所在的FragmentContainerView?***我尝试了多种方法来访问它并将可见性设置为GONE,但我只是遇到了崩溃。

片段内:

FragmentContainerView mainActivityFragmentContainer = (FragmentContainerView) view.findViewById(R.id.main_activity_fragment_container);

public void closeFragment(FragmentContainerView mainActivityFragmentContainer) {
     
        mainActivityFragmentContainer.setVisibility(View.GONE); 
       // This causes a crash, the error log states:
       // NullPointerException: Attempt to invoke virtual method 'void androidx.fragment.app.FragmentContainerView.setVisibility(int)' on a null object reference

}

我知道一个解决方案,我没有让fragmentContainerView填满整个屏幕,并为外部关闭按钮留出空间--但这个解决方案似乎效率低下。任何建议都是有帮助的!

7kjnsjlb

7kjnsjlb1#

是的你能做到,
1-在MainActivity中创建一个公共函数来关闭片段容器:

public void closeFragment() {
    fragmentContainerView.setVisibility(View.GONE);
}

2-需要时从片段中调用该函数:

// getActivity() will return the activity linked to that fragment so this fragment should be linked MainActivity
MainActivity activity = (MainActivity) getActivity();
acitvity.closeFragment();

相关问题