Obtener el elemento seleccionado de customadapter listview Android
lo que he estado haciendo es sobre customadapter. Ahora quiero conseguir el artículo seleccionado de mi listview, pero su adaptador es costumbre. En mi listview, tengo una imagen, título y un título, quiero obtener el elemento seleccionado, en mi caso sólo el título. ¿Cómo puedo hacer eso?
Esto es lo que he probado hasta ahora:
- Adaptador ListView personalizado Android
- Android: cómo eliminar un elemento de una listaVer y arrayAdapter
- Motorola Droid X, Android 2.3.3 divisor de filas de vista de lista
- ¿Cómo puedo obtener uri del elemento ListView que se rellena con Cursor Adapter
- Cómo borrar un Android ListView y llenarlo con nuevos datos?
@Override public void onItemClick(AdapterView<?> parent, View v, int pos, long id) { String strHouseName = "house_name"; String strHousePrice = "house_price"; //String selectedFromList =(String) (lv.getItemAtPosition(pos)); Intent i; switch(pos){ case 0: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "5 Dina Retreat, Carrum Downs"); i.putExtra(strHousePrice, "$300,000.00"); startActivity(i); break; case 1: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 941 Cob Terrace, Clyde North"); i.putExtra(strHousePrice, "$800,000.00"); startActivity(i); break; case 2: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 932 Ventasso Street, Clyde"); i.putExtra(strHousePrice, "$1,000,000.00"); startActivity(i); break; case 3: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 515 Summerhill Blvd, Drouin"); i.putExtra(strHousePrice, "$300,000.00"); startActivity(i); break; case 4: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 17 Todman Street, Drouin (Option 2)"); i.putExtra(strHousePrice, "$550,000.00"); startActivity(i); break; case 5: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 32 Aqueduct Road, Langwarrin"); i.putExtra(strHousePrice, "$600,000.00"); startActivity(i); break; case 6: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Units 2-7, 269 North Road, Langwarin"); i.putExtra(strHousePrice, "$450,000.00"); startActivity(i); break; case 7: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "U 39, 40-60 Potts Road, Langwarrin"); i.putExtra(strHousePrice, "$1,300,000.00"); startActivity(i); break; case 8: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 1 McClenaghan Place, Pakenham"); i.putExtra(strHousePrice, "$2,000,000.00"); startActivity(i); break; case 9: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 2 McClenaghan Place, Pakenham"); i.putExtra(strHousePrice, "$300,000.00"); startActivity(i); break; case 10: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 3 McClenaghan Place, Pakenham"); i.putExtra(strHousePrice, "$900,000.00"); startActivity(i); break; case 11: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 4 McClenaghan Place, Pakenham"); i.putExtra(strHousePrice, "$600,000.00"); startActivity(i); break; case 12: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 5 McClenaghan Place, Pakenham"); i.putExtra(strHousePrice, "$1,200,000.00"); startActivity(i); break; case 13: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 7 McClenaghan Place, Pakenham"); i.putExtra(strHousePrice, "$700,000.00"); startActivity(i); break; case 14: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 11 McClenaghan Place, Pakenham"); i.putExtra(strHousePrice, "$500,000.00"); startActivity(i); break; case 15: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 12 McClenaghan Place, Pakenham"); i.putExtra(strHousePrice, "$3,000,000.00"); startActivity(i); break; case 16: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 532 Summerhill Blvd, Drouin"); i.putExtra(strHousePrice, "$300,000.00"); startActivity(i); break; case 17: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 17 Ajax Street, Drouin"); i.putExtra(strHousePrice, "$300,000.00"); startActivity(i); break; case 18: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 133 Mountainview Blvd, Cranbourne North"); i.putExtra(strHousePrice, "$300,000.00"); startActivity(i); break; case 19: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 531 Summerhill Blvd, Drouin"); i.putExtra(strHousePrice, "$300,000.00"); startActivity(i); break; default: Log.d(strHouseName, "No such house name available"); } } class MyCustomAdapter extends BaseAdapter { String[] data_text1; String[] data_text2; int[] data_image; MyCustomAdapter() { data_text1 = null; data_text2 = null; data_image = null; } MyCustomAdapter(int[] image, String[] house, String[] price) { data_text1 = house; data_text2 = price; data_image = image; } public int getCount() { return data_text1.length; } public String getItem(int position) { return null; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = getLayoutInflater(); View row; row = inflater.inflate(R.layout.listrow, null); TextView textview1 = (TextView) row.findViewById(R.id.text1); TextView textview2 = (TextView) row.findViewById(R.id.text2); ImageView imageview = (ImageView) row.findViewById(R.id.image); imageview.setScaleType(ImageView.ScaleType.FIT_XY); textview1.setText(data_text1[position]); textview2.setText("$" + (new DecimalFormat("#,###.00")).format(Double.parseDouble(data_text2[position])) ); imageview.setImageResource(data_image[position]); return (row); } }
Por el momento, me acaba de obtener a través de su posición, pero el problema es, ¿qué pasa si la lista está ordenada? ¿Cómo puede obtener el elemento seleccionado correctamente? ¿Algunas ideas? Lo agradecería gustoso. Gracias.
- Cambiar el color de la barra de desplazamiento en Android
- Cómo obtener el contexto en getView del adaptador para listview
- Crear un menú después de un evento de clic largo en una vista de lista
- Cómo dibujar un encabezado de sección en android listview al igual que el UITableview del ios?
- ListView de Android enclicklistener no funciona con la casilla de verificación
- ¿Por qué el listview.setAdapter (_adapter) bloquea dos veces la aplicación?
- Ninepatch escala incorrecta al desplazarse después de aplicar un filtro de color?
- Cómo añadir una sugerencia de texto a Android SwipeRefreshLayout
Prueba esto..
@Override public void onItemClick(AdapterView<?> parent, View v, int pos, long id) { TextView textview1 = (TextView) v.findViewById(R.id.text1); TextView textview2 = (TextView) v.findViewById(R.id.text2); Log.v("textview1",textview1.getText().toString().trim()); Log.v("textview2",textview2.getText().toString().trim()); }
En el elemento haga clic en obtener la vista actual, obtenga ui elementos ex título de TextView y enviarlos a la intención
@Override public void onItemClick(AdapterView<?> parent, View v, int pos, long id) { if (v== null) v= inflater.inflate(R.layout.list_row_layout, null); // reached in case of listview bug in android which is a little chance but to make sure not to crash on NPE String title = ((TextView) v.findViewById(R.id.list_row_title)).getText(); String price = ((TextView) v.findViewById(R.id.list_row_price)).getText(); i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, title ); i.putExtra(strHousePrice, price ); startActivity(i); }
Seguro para un ejemplo
// DatasetClass
public class HouseData{ //private String HouseName= ""; private String HousePrice = ""; /*public String getHouseName() { return HouseName; } public void setHouseName(String HouseName) { this.HouseName= HouseName; }*/ public String getHousePrice () { return HousePrice ; } public void setHousePrice (String HousePrice ) { this.HousePrice = HousePrice ; }
// clase del espectador es como: –
public class ViewHolder { public TextView tv_HousePrice,tv_HouseName }
// y aquí está el método getview aquí.
public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder holder; //holder=new ViewHolder(); View listrow = convertView; activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); if (listrow == null) { LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); listrow = vi.inflate(R.layout.your_listview_item_layout, null); holder=new ViewHolder(); holder.tv_HouseName=(TextView)listrow.findViewById(R.id.tv_name); holder.tv_HousePrice=(EditText)listrow.findViewById(R.id.tv_price); listrow.setTag(holder); } else holder=(ViewHolder)listrow.getTag(); listrow.setBackgroundColor(((position % 2)!=0) ? Color.rgb(229,229,229) : Color.WHITE); try { houseData= getItem(position); if (houseData!= null) { holder.tv_HouseName.setText(""+houseData.getHouseName()); holder.tv_HousePrice.setText(""+houseData.getHousePrice()); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } listrow.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //here you can pass complete data object to next activity } }); return listrow; }
Trate de obtener vista. Analizarlo con su texto por id. Obtener el texto y continuar
Prueba esto..
public void onItemClick(AdapterView<?> parent, View v, int pos, long id) { // Type cast to what the layout you used in the xml ie, for the list item // For example i took the RelativeLayout if(v instanceOf RelativeLayout){ RelativeLayout layout = (RelativeLayout) v; TextView title = (TextView) layout.findViewById(R.id.conFormat_Name); System.out.println(title.getText()); } }
Puede crear un miembro que contenga el índice seleccionado en su adaptador personalizado como …
private int selectedIndex;
A continuación, inicializar a selectedIndex = -1
en el constructor de adaptador personalizado y su getter y setters …
public void setSelectedIndex(int index) { this.selectedIndex = index; } public int getSelectedIndex() { return selectedIndex; }
Y por último, sólo tiene que pasar el parámetro de position
de su adaptador onItemClick
en el setter y obtener el elemento seleccionado en cualquier lugar que desee utilizando getter.
Y una vez que mantenga el selectedIndex, puede obtener fácilmente el elemento seleccionado como ..
public BookInfo getSelectedItem() { if (selectedIndex <= -1 || selectedIndex >= items.size()) { return null; } else { return items.get(selectedIndex); } }
espero que esto ayude…:)
- El título de cada línea debe verse diferente en la notificación de estilo de la bandeja de entrada de Android 4.1?
- Obtener el estado actual de MediaPlayer en Android