更改NavigationDrawer的ListView元素选择

时间:2015-03-12 15:31:56

标签: android listview navigation-drawer

我的应用程序包含 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?

谢谢!

  

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

3 个答案:

答案 0 :(得分:0)

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

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

希望有这个帮助,看看你!

答案 1 :(得分:0)

感谢所有人。这些例子很丰富。

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

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

因此我需要按代码突出显示正确的项目...如果可能,或者可能有办法调用NavigationDrawer上的点击,我不知道。

答案 2 :(得分:0)

<强>解决

最后,我找到了按代码选择NavigationDrawer项目的方法。

关键是NavigationDrawerFragment类。 ListView mDrawerListView被定义为私有。它只需要将可访问性更改为public。

然后,在个人按钮(&#34;发现&#34;,在我的情况下),有两种方式:

<强> 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

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