Cambiar el diseño del elemento de lista seleccionado en Android

Necesito crear un ListView y mostrar un diseño más detallado sólo para la fila seleccionada para mostrar más información al cliente. Lo que he intentado es a continuación:

 newsListView.setAdapter(new NewsListAdapter(this, news)); newsListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { LayoutInflater inflater = (LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); //Here I tried to change layout of this row only view = inflater.inflate(R.layout.listitem_news_selected, null); TextView info = (TextView) view.findViewById(R.id.info); NewsData news = (NewsData) parent.getItemAtPosition(position); info.setText(news.getInfo()); } }); 

Y aquí está el NewsListAdapter :

 public class NewsListAdapter extends BaseAdapter { List<NewsData> items; Activity context; /* private view holder class */ private class ViewHolder { TextView title; ImageView image; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); if (convertView == null) { convertView = mInflater.inflate(R.layout.listitem_news, null); holder = new ViewHolder(); holder.title = (TextView) convertView.findViewById(R.id.title); holder.image = (ImageView) convertView.findViewById(R.id.imageView1); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } NewsData news = items.get(position); holder.title.setText(news.getTitle()); new DownloadImageTask(holder.image).execute(news.getImgUrl()); return convertView; } } 

En esta pregunta , una pregunta similar fue hecha pero no me ayudó. Estoy adivinando que tengo que hacer algo con el adaptador, pero me quedé atascado aquí. Cualquier idea será apreciada.

Lo que está haciendo no va a cambiar la vista del elemento ListView, está inflando una vista desconocida.

solución:

Cree un método en su adaptador para establecer la posición del elemento seleccionado:

 public void selectedItem(int position) { this.position = position; //position must be a global variable } 

En su getView inflar la vista cuando la posición es igual a la posición del elemento de clic

 @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); if (convertView == null) { convertView = mInflater.inflate(R.layout.listitem_news, null); holder = new ViewHolder(); holder.title = (TextView) convertView.findViewById(R.id.title); holder.image = (ImageView) convertView.findViewById(R.id.imageView1); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } NewsData news = items.get(position); holder.title.setText(news.getTitle()); new DownloadImageTask(holder.image).execute(news.getImgUrl()); if(this.position == position) { view2 = mInflater.inflate(R.layout.listitem_news_selected, null); TextView info = (TextView) view2.findViewById(R.id.info); info.setText(news.getInfo()); return view2; } return convertView; } 

Usándolo en su onItemClick

 NewsListAdapter adapter = new NewsListAdapter(this, news); newsListView.setAdapter(adapter ); newsListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { adapter.selectedItem(position); adapter.notifyDataSetChange(); } }); 

Siempre tiene una reference/object a su adaptador para que pueda actualizar su listView al hacer clic en él.

  • Android: el evento onItemClick () de ListView no se llama
  • Animar agregar / quitar elementos de ListView con CursorAdapter es posible?
  • Android RelativeLayout fill_parent comportamiento inesperado en un ListView con diferentes alturas de fila
  • Utilizar ListView o GridView dinámicamente en función del diseño utilizado por dispositivo
  • Android ListView Fondo no pintado
  • Android ListView Edge Fading funciona en un dispositivo virtual 2.2 pero no en Samsung 2.2.1
  • Error: No se puede resolver notifyDataSetChanged (); Androide
  • Cambiar el color de texto de ListView
  • Active la casilla de verificación mediante programación
  • Test Robolectric ListView no se actualiza después de cambios de valor en el adaptador
  • Bad convertView type BaseAdapter de ListView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.