Android 更改NavigationDrawer的ListView元素选择
我有一个带有导航抽屉的应用程序 我正在从片段加载片段(通过按钮的onClick事件),但找不到如何更改NavigationDrawer的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
列表视图
中与片段对应的项选择
我试着做:
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
希望这对其他编码人员有所帮助;) 这可能会有帮助。请看一看