我是Android新手。我想实现一个由项目列表组成的导航抽屉,单击该项目将打开一个新活动。基本上是所有活动的导航抽屉。当我从导航抽屉中选择一个项目时,该特定活动即会打开。导航抽屉代码是通过执行空活动来实现的。我想在所有活动都被视为空活动的所有活动中实现导航抽屉功能,因为这些活动已经具有某些功能,并且导航抽屉功能也可以使用。请帮助我。
这是activity_header文件
<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"
android:id="@+id/drawer"
tools:context=".MainActivity">
<android.support.design.widget.NavigationView
app:headerLayout="@layout/header"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@color/white"
app:menu="@menu/drawermenu"
android:layout_gravity="start"
android:id="@+id/navigationView"
>
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
这是我的主要活动
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="90dp"
android:numColumns="2"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
android:layout_marginTop="30dp"/>
这是标题活动Java代码
public class HeaderActivity extends AppCompatActivity {
protected DrawerLayout myDrawerLayout;
protected ActionBarDrawerToggle toggle;
protected NavigationView navigationView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_header);
myDrawerLayout=(DrawerLayout)findViewById(R.id.drawer);
navigationView=(NavigationView) findViewById(R.id.navigationView);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
Log.e("log_cat", "Error Response" + "Error");
switch (menuItem.getItemId())
{
case R.id.dashboard:
Toast.makeText(HeaderActivity.this,"Dashboard Clicked",Toast.LENGTH_LONG).show();
break;
case R.id.devotional:
Toast.makeText(HeaderActivity.this,"devotional Clicked",Toast.LENGTH_LONG).show();
break;
case R.id.inspiration:
Toast.makeText(HeaderActivity.this,"inspiration Clicked",Toast.LENGTH_LONG).show();
break;
case R.id.happy:
Toast.makeText(HeaderActivity.this,"happy Clicked",Toast.LENGTH_LONG).show();
break;
case R.id.sad:
Toast.makeText(HeaderActivity.this,"sad Clicked",Toast.LENGTH_LONG).show();
break;
case R.id.love:
Toast.makeText(HeaderActivity.this,"love Clicked",Toast.LENGTH_LONG).show();
break;
}
return false;
}
});
toggle = new ActionBarDrawerToggle(
this,
myDrawerLayout,
R.string.open,
R.string.close
) {
public void onDrawerClosed(View view) {
//Snackbar.make(view, R.string.drawer_close, Snackbar.LENGTH_SHORT).show();
}
public void onDrawerOpened(View drawerView) {
//Snackbar.make(drawerView, R.string.drawer_open, Snackbar.LENGTH_SHORT).show();
}
};
myDrawerLayout.addDrawerListener(toggle);
toggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// gridview.setAdapter(i);
}
@Override
public boolean onOptionsItemSelected (MenuItem item) {
if (toggle.onOptionsItemSelected (item)) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
这是我的主要活动Java代码
公共类MainActivity扩展了HeaderActivity {
GridView grid;
public static String[] osNameList = {
"Devotional",
"Inspirational",
"Happy",
"Sad",
"Love"
} ;
public static int[] osImages = {
R.drawable.devotional,
R.drawable.inspirational,
R.drawable.happy,
R.drawable.sad,
R.drawable.love
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getLayoutInflater().inflate(R.layout.activity_main, myDrawerLayout);
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this, osNameList, osImages));
}
}
在此代码中,setNavigationItemSelectedListener在mainactivity中不起作用,但是Grid上的setOnClickListener在起作用。当我们单击任何导航菜单元素时,它将移至该活动。
答案 0 :(得分:0)
如果要在所有页面中包含NavigationDrawer
,则应在功能页面中使用Fragment
。
如果您想查看示例,请访问here
此外,我希望您建议将Android Jetpack Navigation Component与NavigationUI
和DrawerLayout
一起使用。
答案 1 :(得分:0)
有两种方法可以在所有活动中实现抽屉,您可以使用片段,也可以在基础活动中创建NavigationDrawer并在需要的地方实现。 Same Navigation Drawer in different Activities