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

Respuesta
 
Herramientas
  #1  
Viejo 03/10/14, 08:37:34
Array

[xs_avatar]
rafaxplayer rafaxplayer no está en línea
Miembro del foro
 
Fecha de registro: jun 2013
Localización: en la barcelona media
Mensajes: 224
Modelo de smartphone: LG-E610
Tu operador: Orange
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);
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.
Responder Con Cita


  #2  
Viejo 03/10/14, 10:11:35
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
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.
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 03/10/14, 16:42:58
Array

[xs_avatar]
rafaxplayer rafaxplayer no está en línea
Miembro del foro
 
Fecha de registro: jun 2013
Localización: en la barcelona media
Mensajes: 224
Modelo de smartphone: LG-E610
Tu operador: Orange
Vaya! pos si era eso kriogen , gracias por la ayuda , te quiero tío XD
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 00:33:04 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /