更改 NavigationDrawer 的 ListView 元素选择

Change ListView element selection of a NavigationDrawer

我有一个应用 NavigationDrawer.

我正在从片段加载片段(通过按钮的 onClick 事件),但我找不到如何更改对应于 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 吗?

谢谢!

SOLVED changing accessibility to public of the ListView mDrawerListView at NavigationDrawerFragment Class. The extendend explanation in the answer at bottom

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

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;
        }
    }
}

在下一个 activity(或像我的 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);
    }

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

感谢大家。例子很丰富。

但是,我的目的是在不使用手指的情况下突出显示 NavigationDrawer 的一项;p

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

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

已解决

终于,我通过代码找到了 select NavigationDrawer 的一个项目的方法。

关键在 class NavigationDrawerFragment。有定义为私有的 ListView mDrawerListView。它只需要将可访问性更改为 public.

然后,在个人按钮("find",在我的例子中),有两种方式:

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

希望这对其他程序员有帮助;)