Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 更改NavigationDrawer的ListView元素选择_Android_Listview_Navigation Drawer - Fatal编程技术网

Android 更改NavigationDrawer的ListView元素选择

Android 更改NavigationDrawer的ListView元素选择,android,listview,navigation-drawer,Android,Listview,Navigation Drawer,我有一个带有导航抽屉的应用程序 我正在从片段加载片段(通过按钮的onClick事件),但找不到如何更改NavigationDrawer的列表视图中与片段对应的项选择 我试着做: final View navigationView = inflater.inflate(R.layout.fragment_navigation_drawer,container,false); ListView lista = (ListView) navigatio

我有一个带有导航抽屉的应用程序

我正在从片段加载片段(通过按钮的onClick事件),但找不到如何更改NavigationDrawer的
列表视图
中与片段对应的项选择

我试着做:

            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中调用单击,以便可以执行NavigationDrawerItemSelected

谢谢

解决了在NavigationDrawerFragment类中更改ListView mDrawerListView的公共可访问性问题。下面答案中的详细解释


我会这样做,从我的listview中选择一个项目,并向另一个活动发送一个字符串,然后根据该字符串执行一些操作:

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

希望这有帮助,再见

谢谢大家。这些例子是丰富的

然而,我的意图是突出显示NavigationDrawer的一项,而不使用手指;p

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


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

已解决

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

密钥位于类NavigationDrawerFragment。有一个ListView mDrawerListView定义为private。它只需要改变对公众的可访问性

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

1。访问NavigationDrawer的ListView并执行过程setItemChecked(int位置,布尔值):

MainActivity.mNavigationDrawerFragment.mDrawerListView.setItemChecked(1, true);
 MainActivity.mNavigationDrawerFragment.mDrawerListView.performItemClick(rootView.findViewById(R.id.navigation_drawer),1,0);
2。访问NavigationDrawer的列表视图并执行执行函数performItemClick(视图视图、int位置、长id)的单击:

MainActivity.mNavigationDrawerFragment.mDrawerListView.setItemChecked(1, true);
 MainActivity.mNavigationDrawerFragment.mDrawerListView.performItemClick(rootView.findViewById(R.id.navigation_drawer),1,0);
就个人而言,我更喜欢第二种方式,因为有代码用于在事件NavigationDrawer.onNavigationDrawerItemSelected(int位置)加载片段,所以只需单击personal按钮并调用performItemClick


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

这可能会有帮助。请看一看