【问题标题】:How to change Navigation Item Selected programmatically如何以编程方式更改选定的导航项
【发布时间】:2017-04-18 02:24:41
【问题描述】:

当我创建一个新项目时,我使用了 Navigation Drawer Activity app screen

现在,当我单击每个菜单项时,它都会通过调用方法名称替换来打开一个片段。

    public boolean onNavigationItemSelected(MenuItem item) {
            // Handle navigation view item clicks here.
            int id = item.getItemId();

            if (id == R.id.nav_home) {
                replaceFragment(0);
                setTit = "Your State Info.";
                setTitle(setTit);
 } else if (id == R.id.nav_flashcards) {

            replaceFragment(1);
            setTit = "Flash Cards";
            setTitle(setTit);

在片段1中,当检查的更改打开碎片时,我有一个放射组,取决于检查的无线电。

 @Override
    public void onCheckedChanged(RadioGroup radioGroup, int i) {

        RadioButton radioButton = (RadioButton)getActivity().findViewById(i);

            if(radioButton.getTag()==1)
        ((MainActivity) getActivity()).replaceFragment(0);
           else if ((radioButton.getTag()==2))
             ((MainActivity) getActivity()).replaceFragment(2);
    }

应用程序工作正常,但问题是如何更改选定的导航项并更改操作栏的标题。

可以这样用

 ((MainActivity) getActivity()).onNavigationItemSelected(menuitem);

但是从片段中我如何访问 menu>activity_main_drawer.xml 中的项目并通过 menuitem 传递它

【问题讨论】:

    标签: android menu-items


    【解决方案1】:

    在您的片段中,您必须添加setOptionsMenu(true)

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }
    
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        // TODO Add your menu entries here
        super.onCreateOptionsMenu(menu, inflater);
    }
    

    【讨论】:

    • nav_flashcards中的fragment会打开一个新的fragment,代表l nav_home,问题是如何将选择项从nav_flashcards移动到nav_home
    【解决方案2】:

    问题不清楚。 navigation drawerfragments 的全部意义在于通过单个主要活动访问导航及其整个片段的主工具栏。(图像中的蓝色,您应该能够在加载片段时随时更改它)

    但是您需要使片段的frame/parent 视图破坏工具栏视图(这就是为什么通常它带有两个XMLs、activtyMain.xmlcontentMain.xml,其中主要内容包含在下面activityMain.XML 中的工具栏),因此您为此 contentMain.xml 创建片段视图 match_parent ,您可以看到工具栏可供您在该视图中添加的每个片段访问,因为它位于添加片段的主要活动中。

    所以你有一个主要的活动,在里面你有片段/s 框架。无论您加载什么片段,您仍然可以访问主工具栏。

    因此,一旦您检查了在 navigationDrawer 中单击了哪个项目,您就会加载与该项目相关的片段,对吗?然后访问mainActivity 的主工具栏并进行您需要显示的更改。就是这样!

     if (id == R.id.nav_whatever) {
     // access toolBar or any view in main activity and do the changes 
    // call relevant  fragment  
     }
    

    但您无法访问您尝试尝试的 Fragment 类中的 toolbarmainActivity 视图。

    编辑:

    在常量类或类似的东西中保留布尔值, 然后,当您单击第二个片段上的按钮时,更改值。 现在让我们说布尔值是真的 然后你再次点击导航抽屉

        // keep the id as it is and use the Boolean to check where you needs to go
         if (id == R.id.nav_whatever) {
           if(boolianName){
             // boolianName is true go load second fragment
               }else{
                 // load firstfragment
                }
    
             }
    

    【讨论】:

    • 我的意思是在 nav_flashcards 片段中有一个单选按钮,当我点击它将打开一个新片段并将当前片段替换为新片段,这将是 nave_home 通过代码(( MainActivity) getActivity()).onNavigationItemSelected ,但是当我打开菜单时,项目选择仍在 nav_flashcards 中,因此我需要一种方法将项目选择通过 nav_flashcards 更改为 nav_home
    • 您的意思是您的导航抽屉项目中有一个名称,该名称具有第一个片段的名称。并且您想在加载第二个片段时更改它?
    • 单击此菜单打开片段 0 时的菜单项 (R.id.nav_home),单击此菜单项打开片段 1 时的菜单项 id (R.id.nav_flahcard),现在在片段 1 中是单选按钮,当我单击此单选时,将打开片段 0,但如果我们打开菜单项,则在 (R.id.nav_flahcard) 上进行选择,因此我还需要在打开时将菜单项选择更改为 (R.id.nav_home)片段 0 通过单选按钮
    【解决方案3】:

    这对我有用..

    NavigationView navigationView = (NavigationView) getActivity().findViewById(R.id.nav_view);
            navigationView.getMenu().getItem(2).setChecked(true); 
    

    【讨论】:

      【解决方案4】:

      如果你使用导航抽屉,你可以使用这段代码,把它放在 onCreate 方法上:

      NavigationView navigationView = (NavigationView) getActivity().findViewById(R.id.nav_view);
              navigationView.getMenu().getItem(2).setChecked(true); 
      

      【讨论】:

      • 您使用的代码与我在 12 月 3 日发布的代码相同
      猜你喜欢
      • 2014-02-17
      • 2017-10-29
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多