EditText de Focusable en ListView y onItemClick

En cada elemento ListView tengo EditText .

Cuando establezco android:focusable="false" para EditText entonces onItemClick en el elemento ListView está trabajando, pero EditText no obtiene el cursor cuando hago click interior.

Si voy a configurar android:focusable="true" para EditText , entonces EditText es EditText , pero onItemClick para el ListView no funciona cuando hago clic en él.

Cómo separar onItemClick y EditText en este elemento?

Gracias @ user370305 por la idea con OnTouchListener. Ahora funciona para mí usando setOnTouchListener() :

 public class AdapterListCards extends CursorAdapter implements View.OnTouchListener { public AdapterListCards(Context context) { super(context, null, true); } @Override public boolean onTouch(View view, MotionEvent motionEvent) { if (view instanceof EditText) { EditText editText = (EditText) view; editText.setFocusable(true); editText.setFocusableInTouchMode(true); } else { ViewHolder holder = (ViewHolder) view.getTag(); holder.edtCode.setFocusable(false); holder.edtCode.setFocusableInTouchMode(false); } return false; } private class ViewHolder { TextView txtName; EditText edtCode; } @Override public View newView(final Context context, Cursor cursor, ViewGroup parent) { View convertView = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false); final ViewHolder holder = new ViewHolder(); holder.txtName = (TextView) convertView.findViewById(R.id.txt_name); holder.edtCode = (EditText) convertView.findViewById(R.id.pass); holder.edtCode.setOnTouchListener(this); convertView.setOnTouchListener(this); convertView.setTag(holder); return convertView; } @Override public void bindView(View view, Context context, Cursor cur) { ViewHolder holder = (ViewHolder) view.getTag(); if (cur!=null) holder.txtName.setText(cur.getString(cur.getColumnIndex("name"))); } } 

Y por supuesto: android:windowSoftInputMode="adjustPan" para la actividad en el manifiesto.

Mi solución:

 @Override public boolean onTouch(View view, MotionEvent motionEvent) { ViewHolder vh = (ViewHolder) view.getTag(); //vh.row is the convertView in getView or you may call it the row item itself ((ViewGroup)vh.row).setDescendantFocusability(view instanceof EditText?ViewGroup.FOCUS_AFTER_DESCENDANTS:ViewGroup.FOCUS_BLOCK_DESCENDANTS); return false; } 

Y añada

 android:descendantFocusability="blocksDescendants" 

Al grupo de vistas en el archivo xml de diseño para el elemento de fila de lista.

La solución que funcionó para mí fue usar el EditText con TextView y un indicador en adater indicando el modo de edición habilitado / deshabilitado.

Añadí el TextView y el EditText en la misma posición en un diseño relativo, lo que significa que se superponen unos a otros. El EditText se ocultará por defecto y TextView se mostrará. En esto el clic del artículo de listview trabaja perfectamente.

Entonces asigné el oyente de tacto para TextView y onTouch ocultar el textview y exhibir el EditText y requestfocus que permite la entrada. Incluso el punto de vista entero en el clic solicitará el enfoque para EditText. Por lo tanto, no se habilitará ningún clic de artículo.

Tengo un botón en la barra de acción "Hecho". Una vez que haga clic en él actualizar mi bandera en el adaptador diciendo "modeEdit = false" y llamar a notificydatasetchanges.

En GetView tenemos comprobar la bandera y si modeEdit = false, entonces mostrar TextView.

Esto fue sólo la mejor solución que tengo que estar trabajando!

Espero que esto ayude. Déjeme saber si alguien está interesado en la copia de trabajo del código fuente.

  • Android: Implementación de la barra de progreso y "cargando ..." para Lista sin fin como Android Market
  • Cómo hacer Android Ver la lista de diseño de Android L Vista previa de diseño
  • Vista de lista con elementos de vista personalizados con superposiciones parciales (Android)
  • Relleno ListView en desplazamiento
  • Varios mensajes push: El contenido del adaptador ha cambiado pero ListView no ha recibido ninguna notificación
  • Cómo cancelar Android ListView elemento de ser activado / resaltado en ListView setOnItemClickListener?
  • Indexación de alfabetos en ListView .. Ignorar la indexación de secciones
  • No se puede arrastrar DrawerLayout desde ListView
  • ¿Cómo evito que los elementos ListView reciclados muestren contenido antiguo?
  • ArrayAdapter de Android: agrega lista de cadenas en lugar de reemplazar
  • Barra de progreso en el fondo del elemento de lista
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.