0

I have following fragment in my main xml file:

<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>

I am trying to hide @+id/main_menu but I am not able to. I have tried following options but they did't work:

  • Get the fragment itself using FragmentManager and hide it with FragmentManager

    FragmentManager fragmentManager = getSupportFragmentManager();
    MenuFragment menuFragment = (MenuFragment)fragmentManager.findFragmentById(R.id.main_menu);
    fragmentManager.beginTransaction().hide(menuFragment).commit();
    
  • Get the fragment View and set it's visibility yo GONE

    View activityRootView = findViewById(R.id.main_activity_layout);
    View fragmentMenu = activityRootView.findViewById(R.id.main_menu);
    fragmentMenu.setVisibility(View.GONE);
    

Can any one help me please ?

UPDATE:

To be more explicit. I have the following metod in my 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();
}

And I am calling this metod from a Fragment:

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;
}
Olcay Ertaş
  • 5,987
  • 8
  • 76
  • 112

3 Answers3

0

it has been solved in here: check the below links, hope it can help:

Show/Hide Fragments and change the visibility attribute programmatically

and this one Show hide fragment in android

Community
  • 1
  • 1
Hawraa Khalil
  • 261
  • 2
  • 12
0

hide works only when the fragment was added to a Container with a transaction programmatically. It doesn't affect Fragments declared in the xml

Blackbelt
  • 156,034
  • 29
  • 297
  • 305
0

I have set fragment layout height to 0 when I want to hide it and restore it's value to show it again.

    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;
        }
    }
Olcay Ertaş
  • 5,987
  • 8
  • 76
  • 112