Android 导航视图-按“后退”按钮时选中更新项目
我在MainActivity(AppCompatActivity)上创建了导航视图。 我在导航视图上有多个项目,每个项目都是一个片段 当我使用后退按钮时,我想转到上一个片段,而不是将我的应用程序放在后台。因此,要在我使用的片段之间进行更改:Android 导航视图-按“后退”按钮时选中更新项目,android,Android,我在MainActivity(AppCompatActivity)上创建了导航视图。 我在导航视图上有多个项目,每个项目都是一个片段 当我使用后退按钮时,我想转到上一个片段,而不是将我的应用程序放在后台。因此,要在我使用的片段之间进行更改: FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction().replace(R.id.layo
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.layout, fragment).addToBackStack(null).commit();
当我按下back按钮时,它会转到上一个片段,但NavigationView中选中的项目仍然保留。按下“后退”按钮时更新NavigationView中选中项的最佳方法是什么?我在我的项目中使用了以下代码……而且它起了作用。。。。 我已将菜单项充气到导航抽屉中。。。。。 您必须在每个片段中实现它…在onActivityCreated()方法中…因为此方法肯定会在创建活动后调用,所以我们可以使用UI元素 //代码
NavigationView navigation = (NavigationView)getActivity().findViewById(R.id.navigation_view);
Menu drawer_menu = navigation.getMenu();
MenuItem menuItem;
menuItem = drawer_menu.findItem(R.id.Id_ofYourMenuItem);
if(!menuItem.isChecked())
{
menuItem.setChecked(true);
}
因此,每次调用您的片段时(通过导航抽屉或按下后退按钮),它都会将菜单项设置为选中状态。对于未来的用户,这里有另一个解决方案: my drawer_menu.xml类似于:
<item
android:id="@+id/Home"
android:title="Home"
android:icon="@drawable/ic_account_balance_black_24dp"
>
</item>
<item
android:id="@+id/courses"
android:title="courses"
android:icon="@drawable/ic_airplay_black_24dp"
>
</item>
<item
android:id="@+id/download"
android:title="Download"
android:icon="@drawable/ic_file_download_black_24dp"
>
</item>
现在在mainactivity中创建一个手动方法,以便在片段恢复时从片段调用此方法:
public void SetNavItemChecked(int id)
{
Menu m=navigationView.getMenu();
MenuItem mi=m.getItem(id);
mi.setChecked(true);
}
现在,在这个示例的所有片段中,Homefragment、CoursesFragment、DownloadFragment就是片段
在HomeFragment(YourFragment)中:
重写onresume方法:
@Override
public void onResume() {
super.onResume();
((MainActivity)getActivity()).SetNavItemChecked(0);
// MainActivity is your activity
//SetNavItemChecked is method from activity and 0 is first item in menu for this example o is HomeFragment
}
对于所有剩余的片段,您可以像上面那样在resume方法中写入,或者,您可以创建一个堆栈,当选择NavigationDrawer的MenuItems时,该堆栈存储这些MenuItems,然后使用onBackButtonPressed方法中的poll方法获取并取消选中MenuItem,并使用peek方法设置Checked(true)当前菜单项
可能不是最有效的方法,但很容易实现。在处理堆栈时,您必须控制
on backpressed
中项目的选中和取消选中。这当然适用于单击导航抽屉中的菜单项。但实际上,您应该在“OnOptions ItemSelected”内调用menuItem.setChecked(true)。当按下“后退”按钮时,您的方法也不起作用,因为按下“后退”按钮时,会从缓存中提取视图,而不会重新绘制。@edwoollard,我已经发布了我在应用程序中使用的工作代码……它正在按“后退”按钮。它必须起作用,因为碎片会重新绘制。我更多的是指活动,因为这对他们不起作用,因为他们坐在后台。
@Override
public void onResume() {
super.onResume();
((MainActivity)getActivity()).SetNavItemChecked(0);
// MainActivity is your activity
//SetNavItemChecked is method from activity and 0 is first item in menu for this example o is HomeFragment
}