【发布时间】:2014-04-16 05:48:43
【问题描述】:
我有一个导航抽屉,其中包含项目列表和这些项目的图标。问题是,当我单击该列表中的一个项目时,位置会随机改变,我不知道为什么。
这是 MainActivity 中的代码:
// Drawer Layout
NavDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
// Lista
NavList = (ListView) findViewById(R.id.lista);
// Declaramos el header el cual sera el layout de header.xml
View header = getLayoutInflater().inflate(R.layout.header, null);
// Establecemos header
NavList.addHeaderView(header);
// Tomamos listado de imgs desde drawable
NavIcons = getResources().obtainTypedArray(R.array.navigation_iconos);
// Tomamos listado de titulos desde el string-array de los recursos
// @string/nav_options
titulos = getResources().getStringArray(R.array.nav_options);
// Listado de titulos de barra de navegacion
NavItms = new ArrayList<Item_objct>();
// Agregamos objetos Item_objct al array
// Perfil
NavItms.add(new Item_objct(titulos[0], NavIcons.getResourceId(0, -1)));
// Favoritos
NavItms.add(new Item_objct(titulos[1], NavIcons.getResourceId(1, -1)));
// Eventos
NavItms.add(new Item_objct(titulos[2], NavIcons.getResourceId(2, -1)));
// Lugares
NavItms.add(new Item_objct(titulos[3], NavIcons.getResourceId(3, -1)));
// Etiquetas
NavItms.add(new Item_objct(titulos[4], NavIcons.getResourceId(4, -1)));
// Configuracion
NavItms.add(new Item_objct(titulos[5], NavIcons.getResourceId(5, -1)));
// Share
NavItms.add(new Item_objct(titulos[6], NavIcons.getResourceId(6, -1)));
// Declaramos y seteamos nuestro adaptador al cual le pasamos el array
// con los titulos
NavAdapter = new NavigationAdapter(this, NavItms);
NavList.setAdapter(NavAdapter);
// Siempre vamos a mostrar el mismo titulo
// mTitle = mDrawerTitle = getTitle();
// Declaramos el mDrawerToggle y las imgs a utilizar
mDrawerToggle = new ActionBarDrawerToggle(this, /* host Activity */
NavDrawerLayout, /* DrawerLayout object */
R.drawable.ic_drawer, /* Icono de navegacion */
R.string.app_name, /* "open drawer" description */
R.string.hello_world /* "close drawer" description */
) {
/** Called when a drawer has settled in a completely closed state. */
public void onDrawerClosed(View view) {
Log.e("Cerrado completo", "!!");
getSupportActionBar().setTitle(titulos[0]);
}
/** Called when a drawer has settled in a completely open state. */
public void onDrawerOpened(View drawerView) {
Log.e("Apertura completa", "!!");
getSupportActionBar().setTitle("Gettford Community");
}
};
// Establecemos que mDrawerToggle declarado anteriormente sea el
// DrawerListener
NavDrawerLayout.setDrawerListener(mDrawerToggle);
// Establecemos que el ActionBar muestre el Boton Home
// Establecemos la accion al clickear sobre cualquier item del menu.
// De la misma forma que hariamos en una app comun con un listview.
NavList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long id) {
MostrarFragment(position);
getSupportActionBar().setTitle(titulos[position -1]);
}
});
// Cuando la aplicacion cargue por defecto mostrar la opcion Home
MostrarFragment(1);
// enable ActionBar app icon to behave as action to toggle nav drawer
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
这是抽屉适配器的代码:
public class NavigationAdapter extends BaseAdapter {
private Activity activity;
ArrayList<Item_objct> arrayitms;
public NavigationAdapter(Activity activity,ArrayList<Item_objct> listarry) {
super();
this.activity = activity;
this.arrayitms=listarry;
}
//Retorna objeto Item_objct del array list
@Override
public Object getItem(int position) {
return arrayitms.get(position);
}
public int getCount() {
// TODO Auto-generated method stub
return arrayitms.size();
}
@Override
public long getItemId(int position) {
return position;
}
//Declaramos clase estatica la cual representa a la fila
public static class Fila
{
TextView titulo_itm;
ImageView icono;
}
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
Fila view;
LayoutInflater inflator = activity.getLayoutInflater();
if(convertView==null)
{
view = new Fila();
//Creo objeto item y lo obtengo del array
Item_objct itm=arrayitms.get(position);
convertView = inflator.inflate(R.layout.drawer_list_item, null);
//Titulo
view.titulo_itm = (TextView) convertView.findViewById(R.id.title_item);
//Seteo en el campo titulo el nombre correspondiente obtenido del objeto
view.titulo_itm.setText(itm.getTitulo());
//Icono
view.icono = (ImageView) convertView.findViewById(R.id.icon);
//Seteo el icono
view.icono.setImageResource(itm.getIcono());
convertView.setTag(view);
}
else
{
view = (Fila) convertView.getTag();
}
return convertView;
}
}
在 Android 4.0+ 中运行良好,但在 Android 2.3 和 2.2 中它变得疯狂。
感谢任何帮助。
谢谢
【问题讨论】:
-
滚动
ListView时也会出现这种情况吗? -
我不知道,没有测试过,但是你知道可能是什么原因吗?
-
Fila是一个static类。删除static。 -
谢谢!我会尝试并尽快报告!
-
不工作,仍然是相同的行为。
标签: android arraylist navigation-drawer android-support-library