【问题标题】:Change ListView element selection of a NavigationDrawer更改 NavigationDrawer 的 ListView 元素选择
【发布时间】:2015-05-14 20:31:37
【问题描述】:

我有一个带有 NavigationDrawer 的应用。

我正在从 Fragment 加载 Fragment(通过按钮的 onClick 事件),但是我找不到如何更改与 Fragment 对应的 NavigationDrawer 的 ListView 的项目选择。

我试过了:

            final View navigationView = inflater.inflate(R.layout.fragment_navigation_drawer,container,false);

            ListView lista = (ListView) navigationView.findViewById(R.id.listMenu);

            lista.setFocusable(true);
            lista.setFocusableInTouchMode(true);
            lista.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
            lista.performItemClick(lista, 2, lista.getItemIdAtPosition(2));
            lista.setItemChecked(2,true);
            lista.setSelection(2);
            lista.requestFocus();

...在 FragmentTransaction commit() 之后,但选中的 ListView 项没有改变。

有没有办法通过代码改变选中的项?

有什么方法可以在 NavigationDrawer 的 ListView 中调用点击,以便执行 onNavigationDrawerItemSelected?

谢谢!

已解决在 NavigationDrawerFragment 类中更改 ListView mDrawerListView 对公共的可访问性。底部答案中的扩展解释

【问题讨论】:

标签: android listview navigation-drawer


【解决方案1】:

已解决

终于找到了通过代码选择 NavigationDrawer 中的一项的方法。

关键在于 NavigationDrawerFragment 类。有定义为私有的 ListView mDrawerListView。它只需要将可访问性更改为公共。

然后,在个人按钮(在我的例子中是“查找”),有两种方法:

1.访问 NavigationDrawer 的 ListView 并执行过程 setItemChecked(int position, boolean value):

MainActivity.mNavigationDrawerFragment.mDrawerListView.setItemChecked(1, true);

2。访问NavigationDrawer的ListView并点击执行函数performItemClick(View view,int position,long id):

 MainActivity.mNavigationDrawerFragment.mDrawerListView.performItemClick(rootView.findViewById(R.id.navigation_drawer),1,0);

个人比较喜欢第二种方式,因为在事件 NavigationDrawer.onNavigationDrawerItemSelected(int position) 有加载Fragment的代码,所以只需要点击个人按钮并调用performItemClick

希望这对其他编码人员有所帮助;)

【讨论】:

    【解决方案2】:

    谢谢大家。例子很丰富。

    但是,我的意图是突出 NavigationDrawer 的一个项目,而不使用手指;p

    我在一个按钮处更改了主框架(另一个片段)(没有单击该项目),但是当它再次显示 navigationdrawer 时,仍然突出显示了前一个项目。

    因此我需要通过代码突出显示正确的项目...如果可能的话,或者是否有一种方法可以调用 NavigationDrawer 上的点击,我不知道。

    【讨论】:

      【解决方案3】:

      好吧,我做了类似的事情,我从我的列表视图中选择一个项目,然后将一个字符串发送到另一个活动,然后根据字符串做一些事情:

      mDrawerList = (ListView) findViewById(R.id.left_drawer);
              mDrawerList.setAdapter(new CustomAdapter(this, prgmNameList, prgmImages));
              mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
      
      private class DrawerItemClickListener implements ListView.OnItemClickListener {
          @Override
          public void onItemClick(AdapterView parent, View view, int position, long id) {
              selectItem(position);//element's position
              Intent intent;
              int CodigoPeticion=0;
              String num ="";
              switch(position){ //depending of which position is, do something
                  case 0:
                      intent = new Intent(Dos.this, MainActivity.class); num="cero"; intent.putExtra("po", num);
                      CodigoPeticion=2; startActivityForResult (intent,CodigoPeticion); finish(); break;
      
                  case 1: //Toast.makeText(getApplicationContext(), "UNO", Toast.LENGTH_LONG).show();
                      intent = new Intent(Dos.this, Uno.class); num="uno"; intent.putExtra("po", num);
                      CodigoPeticion=2; startActivityForResult (intent,CodigoPeticion); finish(); break;
      
                  case 2: //Toast.makeText(getApplicationContext(), "DOS", Toast.LENGTH_LONG).show();
                      intent = new Intent(Dos.this, Dos.class); num="dos"; intent.putExtra("po", num);
                      CodigoPeticion=2; startActivityForResult (intent,CodigoPeticion); finish(); break;
      
                  default: intent = new Intent(Dos.this, Uno.class); num="default"; intent.putExtra("po", num);
                      CodigoPeticion=2; startActivityForResult (intent,CodigoPeticion); finish(); break;
              }
          }
      }
      

      在下一个活动(或与我的 XD 相同)上对项目做一些事情,例如 onCreate 必须是:

      Bundle extras = getIntent().getExtras();
          if (extras!= null) {
              num =extras.getString("po"); //get the string DrawerItemClickListener
          }
      
          if(num.equals("cero")){
              Toast.makeText(getBaseContext(), "0", Toast.LENGTH_LONG).show(); nombre="Digimon";
          }else if(num.equals("uno")){
              Toast.makeText(getBaseContext(), "1", Toast.LENGTH_LONG).show(); nombre="Kaminomi";
             //Toast.makeText(getBaseContext(), Nombres, Toast.LENGTH_LONG).show();
          }else if(num.equals("dos")){
              Toast.makeText(getBaseContext(), "2", Toast.LENGTH_LONG).show(); nombre="nisekoi";
          }else {
              Toast.makeText(getBaseContext(), "default "+num, Toast.LENGTH_LONG).show(); testme.setEnabled(false);
          }
      

      希望对您有所帮助,再见!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-14
        相关资源
        最近更新 更多