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.

  • Listview normal y coloque el estilo de fondo en android
  • Sincronizar 2 ListViews desplazándose
  • Cómo crear android listview como android google cromo pestaña
  • Android: Actualizar ListView en la primera actividad al regresar de la segunda actividad
  • Filtro de vista de lista Android
  • Cómo ocultar un elemento en un listview en Android
  • Android PopUp ListView
  • ¿Cómo puedo acceder a ListView desde el adaptador
  • Mantenimiento de un ListView donde cada elemento de lista tiene una relación de uno a muchos
  • Clasificación de ListView por nombre del producto con adaptador personalizado?
  • ListFragment falta el divisor
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.