Search code examples
androidandroid-fragmentsnavigation-drawerandroid-cardview

How can I make the cardview's disappear?


When I click on any menu item present in the navigation drawer, the content of the menu item appears below the cards. The cards should disappear and then in their place the content of the menu items should be displayed. The contents of the menu items are written in the form of fragments. Could someone help me out in solving it? Attaching the code below...

Here is the MainActivity Java file

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
    actionBarDrawerToggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.drawer_open,R.string.drawer_close);
    drawerLayout.setDrawerListener(actionBarDrawerToggle);
    ////////////////////////////////////////////////////////////////////
    navigationView = (NavigationView)findViewById(R.id.navigation_view);
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
            switch (menuItem.getItemId())
            {
                case R.id.menu_profile:
                    fragmentTransaction=getSupportFragmentManager().beginTransaction();
                    fragmentTransaction.replace(R.id.main_container, new ProfileFragment());
                    fragmentTransaction.commit();
                    getSupportActionBar().setTitle("Profile");
                    menuItem.setChecked(true);
                    drawerLayout.closeDrawers();
                    break;
                case R.id.menu_language:
                    fragmentTransaction=getSupportFragmentManager().beginTransaction();
                    fragmentTransaction.replace(R.id.main_container, new LanguageFragment());
                    fragmentTransaction.commit();
                    getSupportActionBar().setTitle("Set Language");
                    menuItem.setChecked(true);
                    drawerLayout.closeDrawers();
                    break;
                case R.id.menu_tutorial:
                    fragmentTransaction=getSupportFragmentManager().beginTransaction();
                    fragmentTransaction.replace(R.id.main_container, new TutorialFragment());
                    fragmentTransaction.commit();
                    getSupportActionBar().setTitle("Tutorial");
                    menuItem.setChecked(true);
                    drawerLayout.closeDrawers();
                    break;

            }
            return true;
        }
    });
}

Here is the XML file

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:id="@+id/drawer_layout"
    >
     <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
         android:id="@+id/main_container">
        <include
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            layout="@layout/toolbar_layout"
            />
        <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
            android:id="@+id/card_fixed"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:layout_marginTop="5dp"
            card_view:cardCornerRadius="10dp"
            card_view:cardBackgroundColor="@android:color/background_light">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">
                <TextView
                    android:id="@+id/card_fixed_heading"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="10dp"
                    android:text="Sensor Details"
                    android:fontFamily="serif"
                    android:textSize="24sp"
                    android:textStyle="bold"
                    android:textColor="#000"/>
                <TextView
                    android:id="@+id/card_fixed_details"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="10dp"
                    android:padding="5dp"
                    android:text="pH Level - \nTemperature - \nMoisture -"
                    android:fontFamily="serif"
                    android:textSize="16sp"
                    android:textColor="#000"/>
            </LinearLayout>
        </android.support.v7.widget.CardView>
        <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
            android:id="@+id/card_notification"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:layout_marginTop="5dp"
            card_view:cardCornerRadius="10dp"
            card_view:cardBackgroundColor="@android:color/background_light">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">
                <TextView
                    android:id="@+id/card_notification_heading"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Water The Plants!"
                    android:fontFamily="serif"
                    android:textSize="24sp"
                    android:layout_gravity="center"
                    android:textStyle="bold"
                    android:textColor="#000"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Done"
                    android:layout_marginTop="5dp"
                    android:layout_marginBottom="5dp"
                    android:textStyle="bold"
                    android:fontFamily="serif"
                    android:layout_gravity="center_horizontal"
                    />
            </LinearLayout>
        </android.support.v7.widget.CardView>
        <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
            android:id="@+id/card_prediction"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:layout_marginTop="5dp"
            card_view:cardCornerRadius="10dp"
            card_view:cardBackgroundColor="@android:color/background_light">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">
                <TextView
                    android:id="@+id/card_market_heading"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Market Prediction"
                    android:fontFamily="serif"
                    android:textSize="24sp"
                    android:layout_gravity="center"
                    android:textStyle="bold"
                    android:textColor="#000"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Click Here!"
                    android:layout_marginTop="5dp"
                    android:layout_marginBottom="5dp"
                    android:textStyle="bold"
                    android:fontFamily="serif"
                    android:layout_gravity="center_horizontal"
                    android:onClick="marketPrediction"
                    />
            </LinearLayout>
        </android.support.v7.widget.CardView>
        <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
            android:id="@+id/card_pest"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:layout_marginTop="5dp"
            card_view:cardCornerRadius="10dp"
            card_view:cardBackgroundColor="@android:color/background_light">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">
                <TextView
                    android:id="@+id/card_pest_heading"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Pest Details"
                    android:fontFamily="serif"
                    android:textSize="24sp"
                    android:layout_gravity="center"
                    android:textStyle="bold"
                    android:textColor="#000"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Click Here!"
                    android:layout_marginTop="5dp"
                    android:layout_marginBottom="5dp"
                    android:textStyle="bold"
                    android:fontFamily="serif"
                    android:layout_gravity="center_horizontal"
                    android:onClick="pestDetails"
                    />
            </LinearLayout>
        </android.support.v7.widget.CardView>
     </LinearLayout>
    <android.support.design.widget.NavigationView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/navigation_view"
        android:layout_gravity="start"
        app:menu="@menu/drawer_menu"
        app:headerLayout="@layout/navigation_drawer_header"
        >
    </android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>

Solution

    1. You need to fetch ID of the CardView and store it in a variable.

      CardView cardView = findViewById(R.id.card_fixed);

    2. After doing that, you need to setVisibility to GONE to hide the CardView's wherever you want to.

      cardView.setVisibility(View.GONE);

    3. Whenever you setVisibility to your View, there are three options,

    View.VISIBLE, View.INVISIBLE, View.GONE.

    1. You can setVisibility(View.VISIBLE) to make the CardView's or any other Views appear back.

    2. View.INVISIBLE takes up space for layout purposes, but View.GONE won't take any space.

    (For some reason I'm unable to format the code to make CardView visibility to GONE.)