![]() |
|
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
«
Tema Anterior
|
Siguiente tema
»
|
Herramientas |
#1
|
Menu Drawer navigation item dinamico
Saludos compañeros , tengo un problema para actualizar un item deforma dinámica en el nav drawer .
Resulta que despues de cambiar la información del adapter y lanzar notifyDataSetChanged() desde onResume de la actividad , no se actualiza hasta un segundo onresume, os muestro código haber si veis la falla porque no encuentro el motivo. Carga del adapter (onCreate de la actividad) Código:
items = new ArrayList<Object>(); items.add(new UserProfile("No user", "http://www.amsspecialist.com/images/amssp.png")); items.add(new Item(getString(R.string.config), R.drawable.ic_menu_preferences)); items.add(new Item(getString(R.string.about), R.drawable.ic_menu_info_details)); items.add(new Item(getString(R.string.exit), R.drawable.ic_menu_close_clear_cancel)); items.add(new Category("Enlaces")); items.add(new Item(getString(R.string.forumnavigate), R.drawable.ic_action_location_web_site)); items.add(new Item(getString(R.string.helpams), R.drawable.ic_action_action_help)); items.add(new Item(getString(R.string.youtube), R.drawable.ic_action_device_access_video)); items.add(new Item(getString(R.string.facebook), R.drawable.ic_action_face)); items.add(new Item(getString(R.string.rss), R.drawable.ic_action_rss)); items.add(new Item(getString(R.string.check_update), R.drawable.ic_action_store)); mAdapter = new MenuAdapter(items); mDrawerLayout.setDrawerListener(mDrawerToggle); mDrawerList = (ListView) findViewById(R.id.list_slidermenu); mDrawerList.setAdapter(mAdapter); Código:
private static class Item { String mTitle; int mIconRes; Item(String title, int iconRes) { mTitle = title; mIconRes = iconRes; } } private static class UserProfile { String mUser; String avatarurl; UserProfile(String name, String imgAvatarUrl) { mUser = name; avatarurl = imgAvatarUrl; } } private static class Category { String mTitle; Category(String title) { mTitle = title; } } private class MenuAdapter extends BaseAdapter { private List<Object> mItems; MenuAdapter(List<Object> items) { mItems = items; } @Override public int getCount() { return mItems.size(); } @Override public Object getItem(int position) { return mItems.get(position); } @Override public long getItemId(int position) { return position; } @Override public int getItemViewType(int position) { return getItem(position) instanceof Item ? 0 : 1; } @Override public int getViewTypeCount() { return 3; } @Override public boolean isEnabled(int position) { return getItem(position) instanceof Item; } @Override public boolean areAllItemsEnabled() { return false; } @Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; Object item = getItem(position); if (item instanceof UserProfile) { if (v == null) { v = getLayoutInflater().inflate(R.layout.item_profile_user, parent, false); ImageView imUser = (ImageView) v .findViewById(R.id.imageUserProfile); TextView tv = (TextView) v .findViewById(R.id.textuserprofile); new DownloadImageTask(imUser) .execute(((UserProfile) item).avatarurl); tv.setText(((UserProfile) item).mUser); } } else if (item instanceof Category) { if (v == null) { v = getLayoutInflater().inflate(R.layout.menu_row_category, parent, false); } ((TextView) v).setText(((Category) item).mTitle); } else { if (v == null) { v = getLayoutInflater().inflate(R.layout.menu_row_item, parent, false); } TextView tv = (TextView) v; tv.setText(((Item) item).mTitle); tv.setCompoundDrawablesWithIntrinsicBounds( ((Item) item).mIconRes, 0, 0, 0); } // v.setTag(123456, position); return v; } } Código:
mAdapter.mItems.set( 0, new UserProfile(Settings.getString("username", getString(R.string.no_user_login)), Settings.getString( "avatarurl", "http://www.amsspecialist.com/images/amssp.png"))); mAdapter.notifyDataSetChanged(); |
|
#2
|
||||
|
||||
Creo que el problema está en el getView.
Tienes todo el código que actualiza la View dentro del: if (v==null). Ahí dentro sólo debería estar el inflado de la vista, y fuera la asignación de las Views. Al tenerlo todo dentro cuando actualizas a UserProfile no ocurre nada porque v es distinto de null, cuando cambias la orientación o vas a otra Activity y vuelves se vuelve a crear el ListView y por eso si te actualiza los valores, porque es distinto de null. |
Gracias de parte de: | ||
#3
|
Vaya! pos si era eso kriogen , gracias por la ayuda , te quiero tío XD
|
Respuesta |
![]() |
||||||
|
«
Tema Anterior
|
Siguiente tema
»
|
|
Hora actual: 10:36:18 (GMT +2)
HTCMania: líderes desde el 2007