通过在 navigationView 中按下一个 id 来重新加载 navigationView 内容
Reload navigationView content by pressing an id in the navigationView
我目前正在开发一个应用程序,在该应用程序中,我想通过按相同 navigationView
的 header 中的图片来更改 navigationView
的下半部分。
我的 navigationView
是用 header 布局和下半部分的另一个布局构建的。
header 包含一些图片。每张图片都应该导致以下部分的不同布局。
我准备了几个不同的菜单,分别对应不同的类别。每个菜单都集成在不同的布局中,具有唯一的 ID。
目前,打开navigationView
时显示的是主页类别,我不明白如何按图片重新加载下部。
这是mainActivity中的部分代码,在onCreate
//ACTIONBAR
Toolbar mToolbar = findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
assert getSupportActionBar() != null;
getSupportActionBar().setTitle("");
//NAVIGATION VIEW
DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view_home);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, mToolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
navigationView.setNavigationItemSelectedListener(this);
看,nav_view_home
id 已加载,按下此 navigationView header 中的图片,我希望看到下半部分发生变化。现在,我准备了不同的 navigationView,它们都是用相同的 header 制作的:
- nav_view_movie
- nav_view_music
- ...
家庭抽屉布局代码
<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"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/activity_soundsorganisation"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view_home"
android:layout_width="250dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:theme="@style/NavigationTheme"
android:fitsSystemWindows="true"
android:background="#6b6b6b"
app:headerLayout="@layout/format_soundsorganisationdrawerheader"
app:menu="@menu/categorie_menu"
app:itemTextColor="@drawable/nav_view_item_textcolor"
app:itemBackground="@drawable/nav_view_item_background" >
<include layout="@layout/format_soundsorganisationdrawerheader" />
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
电影抽屉布局代码
<include
layout="@layout/activity_soundsorganisation"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view_home"
android:layout_width="250dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:theme="@style/NavigationTheme"
android:fitsSystemWindows="true"
android:background="#6b6b6b"
app:headerLayout="@layout/format_soundsorganisationdrawerheader"
app:menu="@menu/categorie_menu"
app:itemTextColor="@drawable/nav_view_item_textcolor"
app:itemBackground="@drawable/nav_view_item_background" >
<include layout="@layout/format_soundsorganisationdrawerheader" />
</android.support.design.widget.NavigationView>
导航视图布局的header代码
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#303030"
android:gravity="center"
android:orientation="horizontal"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
<ImageView
android:id="@+id/imageView_pic_movie"
android:layout_width="60dp"
android:layout_height="60dp"
android:contentDescription="@string/nav_header_desc"
android:paddingEnd="10dp"
android:paddingStart="10dp"
app:srcCompat="@drawable/pic_movie" />
<ImageView
android:id="@+id/imageView_pic_audio"
android:layout_width="60dp"
android:layout_height="60dp"
android:contentDescription="@string/nav_header_desc"
android:paddingEnd="10dp"
android:paddingStart="10dp"
app:srcCompat="@drawable/pic_audio" />
</LinearLayout>
因此,如您所见,主页布局由 header 和 categorie_menu
组成。现在,我尝试使用由相同的 header 和另一个名为 categorie_menu_movie
的菜单组成的另一个布局按带有 imageView_pic_movie
id 的图片时重新加载完整布局,但没有成功。
也许这是不可能的,或者这也不是最好的方法?也许还有另一种方法可以使用相同的布局,但只需重新加载菜单而不是所有布局?
无论如何,我不明白我应该怎么做。
你能帮帮我吗?
好的,所以我的做法似乎是个糟糕的主意。经过一些研究,我们似乎可以为菜单中的项目或组使用 visible true 或 visible false。
所以只需要执行一个 onClick 方法,并在单击图片或其他图片时将组设置为可见或不可见。
来源:
我目前正在开发一个应用程序,在该应用程序中,我想通过按相同 navigationView
的 header 中的图片来更改 navigationView
的下半部分。
我的 navigationView
是用 header 布局和下半部分的另一个布局构建的。
header 包含一些图片。每张图片都应该导致以下部分的不同布局。
我准备了几个不同的菜单,分别对应不同的类别。每个菜单都集成在不同的布局中,具有唯一的 ID。
目前,打开navigationView
时显示的是主页类别,我不明白如何按图片重新加载下部。
这是mainActivity中的部分代码,在onCreate
//ACTIONBAR
Toolbar mToolbar = findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
assert getSupportActionBar() != null;
getSupportActionBar().setTitle("");
//NAVIGATION VIEW
DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view_home);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, mToolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
navigationView.setNavigationItemSelectedListener(this);
看,nav_view_home
id 已加载,按下此 navigationView header 中的图片,我希望看到下半部分发生变化。现在,我准备了不同的 navigationView,它们都是用相同的 header 制作的:
- nav_view_movie
- nav_view_music
- ...
家庭抽屉布局代码
<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"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/activity_soundsorganisation"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view_home"
android:layout_width="250dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:theme="@style/NavigationTheme"
android:fitsSystemWindows="true"
android:background="#6b6b6b"
app:headerLayout="@layout/format_soundsorganisationdrawerheader"
app:menu="@menu/categorie_menu"
app:itemTextColor="@drawable/nav_view_item_textcolor"
app:itemBackground="@drawable/nav_view_item_background" >
<include layout="@layout/format_soundsorganisationdrawerheader" />
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
电影抽屉布局代码
<include
layout="@layout/activity_soundsorganisation"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view_home"
android:layout_width="250dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:theme="@style/NavigationTheme"
android:fitsSystemWindows="true"
android:background="#6b6b6b"
app:headerLayout="@layout/format_soundsorganisationdrawerheader"
app:menu="@menu/categorie_menu"
app:itemTextColor="@drawable/nav_view_item_textcolor"
app:itemBackground="@drawable/nav_view_item_background" >
<include layout="@layout/format_soundsorganisationdrawerheader" />
</android.support.design.widget.NavigationView>
导航视图布局的header代码
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#303030"
android:gravity="center"
android:orientation="horizontal"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
<ImageView
android:id="@+id/imageView_pic_movie"
android:layout_width="60dp"
android:layout_height="60dp"
android:contentDescription="@string/nav_header_desc"
android:paddingEnd="10dp"
android:paddingStart="10dp"
app:srcCompat="@drawable/pic_movie" />
<ImageView
android:id="@+id/imageView_pic_audio"
android:layout_width="60dp"
android:layout_height="60dp"
android:contentDescription="@string/nav_header_desc"
android:paddingEnd="10dp"
android:paddingStart="10dp"
app:srcCompat="@drawable/pic_audio" />
</LinearLayout>
因此,如您所见,主页布局由 header 和 categorie_menu
组成。现在,我尝试使用由相同的 header 和另一个名为 categorie_menu_movie
的菜单组成的另一个布局按带有 imageView_pic_movie
id 的图片时重新加载完整布局,但没有成功。
也许这是不可能的,或者这也不是最好的方法?也许还有另一种方法可以使用相同的布局,但只需重新加载菜单而不是所有布局?
无论如何,我不明白我应该怎么做。
你能帮帮我吗?
好的,所以我的做法似乎是个糟糕的主意。经过一些研究,我们似乎可以为菜单中的项目或组使用 visible true 或 visible false。
所以只需要执行一个 onClick 方法,并在单击图片或其他图片时将组设置为可见或不可见。
来源: