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);
Esto seria el codigo relacionado con el adapter:
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;
}
}
Para realizar cambios hay que ir a otra actividad donde se actualiza la info en el preferences y cerrándola después lo que retorna a la principal y on resume se actualiza el item en concreto del menu drawer asi:
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();
Pues como comento el problema es que no se actualiza en el primer on resume , hay que lanzar un segundo ya sea con un cambio de orientación del dispositivo o lo que sea para que se muestren los cambios ¿cual podria ser el fallo? no doy con ello.