我的应用程序包含 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解释
答案 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
希望这有助于其他程序员;)