简体   繁体   中英

Working with Navigation Drawer in multiple activities?

  • I'm new and I'm learning to use the Android Studio Navigation Drawer Activity Template code (mainMenu.java) to start this project
  • I've created another Empty Activity (viewProfile.java) so that it can be called when user press the Navigation Drawer menu. Example: User press 'View Profile' inside the menu.
  • I need help on how to have a single Navi Drawer menu in all my activities, like viewProfile.java Activity.
  • Tried copying all codes related to Navi Drawer from mainMenu.java and paste into viewProfile.java. Doesnt work at all, sadly.
  • I've commented some of the codes that I have tried.

mainMenu.java

public class mainMenu extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

    //Defining views
    private TextView editTextUserName;
    private TextView textView_profile_name;
    private TextView textView_profile_email;
    private TextView textView_profile_amount;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
    }


    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }



@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();

    if (id == R.id.nav_profile) {
        Toast.makeText(this, "nav_profile", Toast.LENGTH_SHORT).show();
    } else if (id == R.id.nav_listing) {
        startActivity(new Intent(this, ViewAllStock.class));
    } else if (id == R.id.nav_history) {
        Toast.makeText(this, "nav_history", Toast.LENGTH_SHORT).show();
    } else if (id == R.id.nav_coming) {
        Toast.makeText(this, "nav_coming", Toast.LENGTH_SHORT).show();
    } else if (id == R.id.nav_logout) {
        logout();
    } else if (id == R.id.nav_setting) {
        Toast.makeText(this, "nav_setting", Toast.LENGTH_SHORT).show();
    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}
}

viewProfile.java

public class viewProfile extends AppCompatActivity implements ListView.OnItemClickListener, NavigationView.OnNavigationItemSelectedListener {
  private ListView listView;

    private String JSON_STRING;

    private SwipyRefreshLayout mSwipyRefreshLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_all_stock);

//        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
//        setSupportActionBar(toolbar);
//
//        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
//        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
//                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
//        drawer.setDrawerListener(toggle);
//        toggle.syncState();
//
//        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
//        navigationView.setNavigationItemSelectedListener(ViewAllStock.this);

    }


    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_profile) {
            // Handle the camera action
            Toast.makeText(ViewAllStock.this, "nav_profile", Toast.LENGTH_SHORT).show();
        } else if (id == R.id.nav_listing) {
            Toast.makeText(ViewAllStock.this, "nav_listing", Toast.LENGTH_SHORT).show();
        } else if (id == R.id.nav_history) {
            Toast.makeText(ViewAllStock.this, "nav_history", Toast.LENGTH_SHORT).show();
        } else if (id == R.id.nav_coming) {
            Toast.makeText(ViewAllStock.this, "nav_coming", Toast.LENGTH_SHORT).show();
        } else if (id == R.id.nav_logout) {
            Toast.makeText(ViewAllStock.this, "nav_logout", Toast.LENGTH_SHORT).show();;
        } else if (id == R.id.nav_setting) {
            Toast.makeText(ViewAllStock.this, "nav_setting", Toast.LENGTH_SHORT).show();
        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
}

It is advisable to use multiple fragments rather than activities in such a case. But even if you still want to use different activities then simply include navigation drawer in other activities the same way you implemented in one of them. However this leads to writing of same piece of code multiple times, which should be avoided.

使用片段和容器,这样如果你想改变布局,你只能改变布局的一部分而不是整个布局。所以你的导航抽屉在你的应用程序中保持安全。

You should use fragments for this and you can get lots of demo for this.. and if still you wanna use activity you have to include nevigation in every layout like this

    <?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:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

<RelativeLayout 
    android:layout_width="match_parent"
    android:background="@drawable/bg"
    android:layout_height="match_parent" >

      <LinearLayout
            android:id="@+id/container_toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:orientation="vertical" >

            <include
                android:id="@+id/toolbar_offr"
                layout="@layout/toolbar_offer" />
        </LinearLayout>

    <ListView
        android:id="@+id/OfferFragLV"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/ll1">
    </ListView>



</RelativeLayout>
   <fragment
        android:id="@+id/fragment_navigation_drawer"
        android:name="com.phoenix.spicejunction.frag.FragmentDrawer"
        android:layout_width="@dimen/nav_drawer_width"
        android:layout_height="match_parent"
        android:layout_below="@id/mainRL"
        android:layout_gravity="start"
        android:layout_marginTop="50dp"
        app:layout="@layout/fragment_navigation_drawer"
        tools:layout="@layout/fragment_navigation_drawer" />

</android.support.v4.widget.DrawerLayout>

and here is my fragment_navigation_drawer layout file

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:layout_marginTop="40dp"
 >

    <RelativeLayout
        android:id="@+id/nav_header_container"
        android:layout_width="match_parent"
        android:layout_height="145dp"
        android:layout_alignParentTop="true"
        android:background="#fff"
        android:gravity="center" >

        <com.phoenix.spicejunction.CircleImageView
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/profileIV"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="@dimen/_10sdp"
            android:src="@drawable/ic_launcher"
            app:civ_border_color="@color/my_yellow"
            app:civ_border_width="3dp" />

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/profileIV"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="5dp"
            android:text="TextView"
            android:textColor="#000" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_below="@+id/textView1"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="@dimen/_5sdp"
            android:text="AGE: "
            android:textColor="#000" />
    </RelativeLayout>

    <!--
         <android.support.v7.widget.RecyclerView
        android:id="@+id/drawerList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/nav_header_container"
        android:layout_marginTop="15dp" />
    -->

          <ListView
        android:id="@+id/home_listDrawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/nav_header_container"
        android:layout_gravity="start"
        android:layout_marginTop="5dp"

        android:entries="@array/slider_array" />

     </RelativeLayout>

and i am using this this method

 @Override
       public void onDrawerItemSelected(View view, int position) {
           base.displayView(position);
      }

so you have to implemenmt this method in every activity and by calling any activity make them finish..

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM