Android: Obtiene el elemento listview del botón que se hace clic en la vista de lista personalizada
Tengo un ListView de encargo con dos botón y yo cuando hago clic en cualquier botón en cualquier fila que quiero conseguir la etiqueta del texto en el Listview y por ahora apenas popup un tostado con él. Hasta ahora nada ha funcionado. Sigo recibiendo el último elemento en mi array.
Aquí hay una captura de pantalla para darle una mejor idea de lo que quiero decir
- Android: ¿Cómo escalas múltiples vistas juntas?
- Método recomendado para presentar texto con formato en Android?
- Menús dinámicos en NavigationView
- Eliminar un OnClickListener en una vista quitar todos los eventos de toque en las vistas detrás
- Obtenga de forma fiable la altura de la barra de estado para resolver problemas de navegación translúcida de KitKat
Aquí está mi subclase de adaptador para mi ListView personalizado
static final String[] Names = new String[] { "John", "Mike", "Maria", "Miguel"}; class MyArrayAdapter extends ArrayAdapter<String> { private final Context context; int which; public MyArrayAdapter(Context context, String[] pValues) { super(context, R.layout.main, pValues); this.context = context; values = pValues; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); rowView = inflater.inflate(R.layout.main, parent, false); TextView textView = (TextView) rowView.findViewById(R.id.label); ImageView imageView = (ImageView) rowView.findViewById(R.id.logo); Button call = (Button) rowView.findViewById(R.id.button1); Button chat = (Button) rowView.findViewById(R.id.button2); textView.setText(values[position]); // Change icon based on name s = values[position]; which = position; call.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String name = values[which]; Toast.makeText(CustomListView.this, name, Toast.LENGTH_SHORT).show(); } }); return rowView; } }
Editar:
String name = textView.getText().toString(); RelativeLayout ll = (RelativeLayout)v.getParent(); textView = (TextView)ll.findViewById(R.id.label); Toast.makeText(CustomListView.this, name, Toast.LENGTH_SHORT).show();
- Diseño de animación Android
- ¿Por qué la publicación y cancelación de un runnable en un resultado de View and Handler en bahviour diferente?
- Cómo eliminar el fondo de una vista (normal) (Android)
- Android: Elementos de interfaz de usuario sobre capa de lienzo
- Nuevo en Android - Dibujo de una vista en tiempo de ejecución
- GetDrawingCache devuelve siempre el mismo Bitmap
- SearchView edittext siempre es nulo
- Guardar vista de mapa de bits con getDrawingCache da una imagen en negro
Fácil de hacer:
call.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { RelativeLayout rl = (RelativeLayout)v.getParent(); TextView tv = (TextView)rl.findViewById(R.id.label); String text = tv.getText().toString(); Toast.makeText(CustomListView.this, text, Toast.LENGTH_SHORT).show(); } });
Use el atributo setTag de la vista …………..
como
Button call = (Button) rowView.findViewById(R.id.button1); call.setTag(position);
y
call.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int which = -1; Obejct obj = v.getTag(); if(obj instaceof Integer){ which = ((Integer)obj).intValue(); } if(which >-1){ String name = values[which]; Toast.makeText(CustomListView.this, name, Toast.LENGTH_SHORT).show(); } } });
Si tiene una ListActivity y no está utilizando su propio adaptador, puede obtener el elemento de lista que pertenece al botón pulsado, así:
En el archivo de diseño de la fila de la lista:
<ImageButton android:id="@+id/button_call" android:layout_height="48dip" android:layout_width="48dip" android:contentDescription="Call" android:onClick="callBuddy" android:src="@drawable/call_button_image" />
En su ListActivity:
public void callBuddy(View view) { int position = getListView().getPositionForView((View) view.getParent()); Buddy buddyToCall = (Buddy) getListView().getItemAtPosition(position); Toast.makeText(MyListActivity.this, String.format("Calling your buddy %s.", buddyToCall.name), Toast.LENGTH_SHORT).show(); }
Simplemente use getItem () y pase la posición Ex: getItem(position).getID()
aquí getID () método es getter método
Set onClick = "haga clic" en xml de botón / imagen / etc …
Y en su Actividad, haga:
public void click(View v) { final int position = getListView().getPositionForView(v); String text = getListView().getItemAtPosition(position).toString(); Toast.makeText(getApplicationContext, text, Toast.LENGTH_SHORT).show(); }
- Instalar la aplicación de phonegap en el emulador de Android usando Windows CLI
- "No se puede ejecutar dex: límite de sobrecarga de GC superado"