更改 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
希望这对其他程序员有帮助;)
我有一个应用 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
希望这对其他程序员有帮助;)