Android: 在 xml 中静态添加的隐藏片段

Android: Hiding fragment which added statically in xml

我的 xml 主文件中有以下片段:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_activity_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/prayer_times_background"
    tools:context="com.yceo.namazvakti.MainActivity">

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/main_menu"
        android:layout_alignParentEnd="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true">
    </FrameLayout>

    <ImageView
        android:id="@+id/settingButton"
        android:layout_width="@dimen/top_right_Button_height_width_size"
        android:layout_height="@dimen/top_right_Button_height_width_size"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:padding="@dimen/top_right_button_pedding"
        android:layout_marginTop="@dimen/top_right_Button_margin_top"
        android:layout_marginRight="10dp"
        android:layout_marginEnd="10dp"
        android:src="@drawable/ic_menu_settings"
        android:scaleType="fitCenter"/>

    <fragment
        android:id="@+id/main_menu"
        android:name="com.yceo.namazvakti.fragments.MenuFragment"
        android:layout_width="match_parent"
        android:layout_height="@dimen/menu_layout_height"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentStart="true"
        tools:layout="@layout/fragment_menu">

    </fragment>

</RelativeLayout>

我想隐藏 @+id/main_menu 但我做不到。我尝试了以下选项,但它们没有用:

有人能帮帮我吗?

更新:

更明确一点。我的 MainActivity

中有以下方法
public void setMenuVisibility(int visibility){

    Log.d(LOG_TAG, "MainActivity - setMenuVisibility");

    switch (visibility) {

        case View.VISIBLE:
            Log.d(LOG_TAG, "MainActivity - setMenuVisibility - Showing menuFragment...");
            break;

        case View.GONE:
            Log.d(LOG_TAG, "MainActivity - setMenuVisibility - Hiding menuFragment...");
            break;
    }

    fragmentMenu.setVisibility(View.GONE);

    if (menuFragment != null) {
        View v = menuFragment.getView();

        if (v != null)
            v.setVisibility(visibility);
    }

    fragmentManager.beginTransaction().hide(menuFragment).commit();
}

我从片段中调用这个方法:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    mainActivity = (MainActivity)getActivity();
    mainActivity.setSettingsButtonVisibility(View.GONE); <-- This works
    mainActivity.setMenuVisibility(View.GONE); // <--- But this is not

    View rootView = inflater.inflate(R.layout.fragment_quran_page, container, false);

    backImageView = (ImageView)rootView.findViewById(R.id.back);
    backImageView.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            FragmentManager fm = getActivity().getSupportFragmentManager();
            fm.popBackStack();
        }
    });

    return rootView;
}

这里已经解决了:查看以下链接,希望对您有所帮助:

Show/Hide Fragments and change the visibility attribute programmatically

还有这个 Show hide fragment in android

hide 仅当片段以编程方式添加到具有事务的容器时才有效。它不影响在 xml

中声明的 Fragments

当我想隐藏它并恢复它的值以再次显示它时,我已将片段布局高度设置为 0。

    public void setMenuVisibility(int visibility){

        Log.d(LOG_TAG, "MainActivity - setMenuVisibility");
        ViewGroup.LayoutParams lp;

        switch (visibility) {

            case View.VISIBLE:
                Log.d(LOG_TAG, "MainActivity - setMenuVisibility - Showing menuFragment...");
                lp = fragmentMenu.getLayoutParams();
                lp.height = oldLp.height;
                fragmentMenu.setLayoutParams(lp);
                break;

            case View.GONE:
                Log.d(LOG_TAG, "MainActivity - setMenuVisibility - Hiding menuFragment...");
                lp = fragmentMenu.getLayoutParams();
                oldLp = new ViewGroup.LayoutParams(lp.width, lp.height);
                lp.height = 0;
                fragmentMenu.setLayoutParams(lp);
                break;
        }
    }