我正在构建一个仅使用活动的应用程序(因为我听说片段对于新的android用户而言太复杂了。
我正在尝试将我的主导航抽屉应用于所有活动,而不是使用片段。
我的主要活动嵌入了导航抽屉方法,但其他所有活动却没有,因为我无法从其他活动中调用导航抽屉。
主要活动代码:
DrawerLayout drawerLayout;
NavigationView navigationView;
ActionBarDrawerToggle toggle;
ImageView menuIcon;
FrameLayout contentMain;
static final float END_SCALE = 0.7f;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
drawerLayout = findViewById(R.id.drawer);
navigationView = findViewById(R.id.navigation_header);
menuIcon = findViewById(R.id.imageViewMenuButton2);
contentMain = findViewById(R.id.contentMain);
toggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawerOpen, R.string.drawerClose);
drawerLayout.addDrawerListener(toggle);
toggle.syncState();
navigationDrawer();
}
private void navigationDrawer() {
navigationView.bringToFront();
navigationView.setNavigationItemSelectedListener(this);
navigationView.setCheckedItem(R.id.home);
menuIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (drawerLayout.isDrawerVisible(GravityCompat.START))
drawerLayout.closeDrawer(GravityCompat.START);
else drawerLayout.openDrawer(GravityCompat.START);
}
});
animateNavigationDrawer();
}
private void animateNavigationDrawer() {
drawerLayout.setScrimColor(getResources().getColor(R.color.colorPrimaryDark));
drawerLayout.addDrawerListener(new DrawerLayout.SimpleDrawerListener() {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
// Scale the View based on current slide offset
final float diffScaledOffset = slideOffset * (1 - END_SCALE);
final float offsetScale = 1 - diffScaledOffset;
contentMain.setScaleX(offsetScale);
contentMain.setScaleY(offsetScale);
// Translate the View, accounting for the scaled width
final float xOffset = drawerView.getWidth() * slideOffset;
final float xOffsetDiff = contentMain.getWidth() * diffScaledOffset / 2;
final float xTranslation = xOffset - xOffsetDiff;
contentMain.setTranslationX(xTranslation);
}
});
}
@Override
public void onBackPressed() {
if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
drawerLayout.closeDrawer(GravityCompat.START);
} else
super.onBackPressed();
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()) {
// case R.id.home:
// Intent intent0 = new Intent(activityMain.this, activityMain.class);
// startActivity(intent0);
// break;
case R.id.about:
Intent intent = new Intent(activityMain.this, activityAboutApp.class);
startActivity(intent);
break;
case R.id.books:
Intent intent2 = new Intent(activityMain.this, activityBooks.class);
startActivity(intent2);
break;
case R.id.favourites:
Intent intent3 = new Intent(activityMain.this, activityQuotes.class);
startActivity(intent3);
break;
case R.id.authors:
Intent intent4 = new Intent(activityMain.this, activityAuthors.class);
startActivity(intent4);
break;
case R.id.newDesign:
Intent intent5 = new Intent(activityMain.this, QuotesActivity.class);
startActivity(intent5);
}
drawerLayout.closeDrawer(GravityCompat.START);
return true;
}
}
我希望启用我的导航抽屉的活动代码(第二个活动):
public class activityAboutApp extends AppCompatActivity {
ImageView backButton;
@Nullable
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_aboutus);
backButton = findViewById(R.id.imageViewMenuButton);
backButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
activityAboutApp.super.onBackPressed();
}
});
}
}
您可以看到,我退出第二个活动的唯一方法是通过onBackPressed()函数使用后退按钮。这不是我想要的。我正在寻找的是当用户单击第二个活动上的菜单按钮时,将调用导航抽屉(换句话说,将调用导航菜单,并且用户可以选择下一步去哪里)。
两个活动的.xml布局都已设置,并且所有必需的导入均已建立。
实现此目标的最佳方法是分段,但是您可以采取解决方法。创建一个超级MainActivity并将Navigation Drawer,其他常用方法以及所有内容放入此活动中,并将该活动扩展到所有活动。这样,您无需为每个活动都初始化导航抽屉,只需要将导航抽屉的XML包含在每个活动的XML文件中。让我知道您是否需要我的帮助来实现这一目标,我们可以根据需要进行协作。