我在MainActivity上创建了一个NavigationView(AppCompatActivity)。 我在NavigationView上有多个项目,每个项目都是片段。
当我使用后退按钮时,我想转到之前的片段,而不是将我的应用程序放在背景上。因此,要在我使用的片段之间进行更改:
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.layout, fragment).addToBackStack(null).commit();
当我按下后退按钮时,它会转到上一个片段,但是导航视图的项目仍然存在。哪个是在按下后退按钮时更新NavigationView项目的最佳方法?
答案 0 :(得分:1)
我在我的项目中使用了以下代码....它有效.... 我把菜单项膨胀到导航抽屉..... 你必须在你的每个片段中实现它...在onActivityCreated()方法....因为这个方法肯定会在创建活动后调用,所以我们可以使用UI元素......
//代码.....
pointLabel
因此,每次调用片段时(通过导航抽屉或按下后退按钮),它都会自动设置菜单项。
答案 1 :(得分:1)
对于未来的用户来说,这是另一种解决方案:
我的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>
0:家里
1:课程
2:下载
现在进入您的Mainactivity :(我只向您显示导航视图目的代码)
private private NavigationView navigationView;
protected void onCreate(Bundle savedInstanceState)
{
navigationView= (NavigationView) findViewById(R.id.navview);
}
现在在mainactivity中创建一个手动方法,以便在片段恢复时从片段调用此方法:
public void SetNavItemChecked(int id)
{
Menu m=navigationView.getMenu();
MenuItem mi=m.getItem(id);
mi.setChecked(true);
}
现在在这个exmple Homefragment的所有片段中,CoursesFragment,DownloadFragments是片段
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
}
对于所有剩余的片段,你可以用上面的简历方法写
答案 2 :(得分:0)
或者,你可以创建一个Stack,它在选择后存储NavigationDrawer的MenuItems,然后在onBackButtonPressed方法中使用poll方法获取和取消选中MenuItem和peek方法setChecked(true)当前的MenuItem 。
可能不是最有效的方式,但很容易实现。