Nhờ có câu trả lời ở trên tôi đã có thể thực hiện chính xác những gì tôi muốn, đây là chính xác những gì tôi đã làm cho bất cứ ai tìm kiếm này trong tương lai:
activity_main.xml của tôi trông như thế này:
<!--When the DrawerLayout is the root layout, the first child-->
<!--of that layout is the contents of the main screen, and the-->
<!--second child is the contents of the menu-->
<!--First child layout-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include
layout="@layout/toolbar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/content_frame"/>
</LinearLayout>
<!--Second child layout-->
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="start"
app:headerLayout="@layout/navigation_drawer_header"
app:menu="@menu/drawer_menu">
</android.support.design.widget.NavigationView>
Đây là DrawerLayout tiêu chuẩn, kéo tất cả các bit và phần cho menu NavigationDrawer. Việc bổ sung quan trọng vào đây là FrameLayout ... bit mà tôi đã cung cấp ID content_frame. Đây là nơi tất cả các bố cục khác được sử dụng bởi các hoạt động khác sẽ được đẩy/thêm/tăng cao.
My BaseActivity.java trông như thế này:
package com.example.test;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.NavigationView;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
public class BaseActivity extends AppCompatActivity {
DrawerLayout drawerLayout;
ActionBarDrawerToggle actionBarDrawerToggle;
Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NavigationView navigationView = (NavigationView) findViewById(R.id.navigation_view);
toolbar = (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_closed);
drawerLayout.setDrawerListener(actionBarDrawerToggle);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_home:
Intent anIntent = new Intent(getApplicationContext(), TheClassYouWantToLoad.class);
startActivity(loadPlayer);
drawerLayout.closeDrawers();
break;
}
return false;
}
});
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
actionBarDrawerToggle.syncState();
}
}
Bây giờ, trong phương pháp onNavigationItemSelected, có một câu lệnh switch để xử lý những gì sẽ xảy ra khi mỗi mục menu được chọn. Đây là bit quan trọng:
Intent anIntent = new Intent(getApplicationContext(), TheClassYouWantToLoad.class);
startActivity(anIntent);
drawerLayout.closeDrawers();
Bạn cần thay "TheClassYouWantToLoad" bằng lớp của riêng bạn. Bây giờ trong lớp mới này (mà có lẽ đòi hỏi một số yếu tố giao diện người dùng mới được nạp), bạn cần như sau:
public class TheClassYouWantToLoad extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrameLayout contentFrameLayout = (FrameLayout) findViewById(R.id.content_frame); //Remember this is the FrameLayout area within your activity_main.xml
getLayoutInflater().inflate(R.layout.the_layout_you_want_to_load, contentFrameLayout);
}
}
và thay thế "the_layout_you_want_to_load" với tên của bố cục bạn muốn tải.
Bằng cách này, những gì tôi đang làm bây giờ là tôi có một BaseActivity mà đặt NavigationDrawer tại chỗ và tải lên bố trí chính. Tôi biết rằng tôi có thể lặp lại mã này trong mọi hoạt động, nhưng tôi đang cố gắng tránh phải lặp lại mã. Tôi đã thử các lớp khác của tôi mở rộng BaseActivity này, nhưng sau đó tôi không biết làm thế nào để tải lên một bố cục mới mà không làm mất menu –