导航视图 - 按下后退按钮上的更新项目

时间:2016-07-13 08:11:39

标签: android

我在MainActivity上创建了一个NavigationView(AppCompatActivity)。 我在NavigationView上有多个项目,每个项目都是片段。

当我使用后退按钮时,我想转到之前的片段,而不是将我的应用程序放在背景上。因此,要在我使用的片段之间进行更改:

       FragmentManager fragmentManager = getSupportFragmentManager();
       fragmentManager.beginTransaction().replace(R.id.layout, fragment).addToBackStack(null).commit();

当我按下后退按钮时,它会转到上一个片段,但是导航视图的项目仍然存在。哪个是在按下后退按钮时更新NavigationView项目的最佳方法?

3 个答案:

答案 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 。

可能不是最有效的方式,但很容易实现。