Seleccione editexts texto en una vista de lista. ¿Cómo se puede hacer? No puedo averiguarlo

Tengo un ListView con un EditText en cada fila que trabaja.

Necesito seleccionar este texto al hacer clic en el edittext para escribir números sin borrar o mover el cursor.

Usando selectAllonfocus al principio funciona. Sin embargo, después de desplazar el listview, el EditText se volvió loco y la selección no funciona correctamente.

Si ejecuto selectAll en el oyente enFocus, entonces cuando se hace un toque se muestra el contexto (selección de palabra, seleccione todo, etc) en lugar de la selección.

Si alguien puede ayudar.

Gracias.

No puedo decir lo que está tratando de hacer. Tal vez te ayude si puedes publicar algo de tu código fuente relevante …

Pero el hecho de que se vuelve loco cuando empiezas a desplazarte me hace pensar que no estás manejando el convertView correctamente en tu adaptador getView ().

Si tienes problemas después de desplazarte, es el reciclaje de la vista lo que te estropea. Básicamente, es necesario configurar una matriz para contener el contenido de la EditTexts por lo que cuando se desplazan no se desordenado. No dijiste lo que estaba respaldando tu lista, pero tengo una lista con editadoxts contenido y aquí es cómo lo manejo (desde un cursor, pero puedes adaptarlo para un ArrayAdapter):

 public class CursorAdapter_EditText extends SimpleCursorAdapter { private static Cursor c; private Context context; public static String[] quantity; private int layout; public CursorAdapter_EditText(Context context, int layout, Cursor c, String[] from, int[] to) { super(context, layout, c, from, to); CursorAdapter_EditText.c = c; this.context = context; this.layout = layout; initializeQuantity(); // Call method to initialize array to hold edittext info } public static void initializeQuantity() { quantity = new String[c.getCount()]; // Initialize array to proper # of items int i = 0; while (i < c.getCount()) { quantity[i] = ""; // set all EditTexts to empty i++; } } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) convertView = View.inflate(context, layout, null); final int pos = position; View row = convertView; c.moveToPosition(position); TextView name = (TextView) row.findViewById(R.id.ListItem1); EditText qty = (EditText) row.findViewById(R.id.qty); qty.setOnFocusChangeListener(new View.OnFocusChangeListener() { // Set so EditText will be saved to array when you leave it @Override public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { LinearLayout parent = (LinearLayout) v.getParent(); EditText qtyTemp = (EditText) parent.findViewById(R.id.qty); // Get a reference to EditText (you could probaly use v here) quantity[pos] = qtyTemp.getText().toString(); // Save contents of EditText to array } } }); name.setText(c.getString(1)); unit.setText(c.getString(3)); qty.setText(quantity[position]); return (row); } } 

Entonces tengo un botón fuera de la matriz que los procesos de nuevo en mi base de datos como este:

 commit.setOnClickListener(new OnClickListener() { public void onClick(View v) { int i = 0; itemCursor.moveToFirst(); while (itemCursor.isAfterLast() == false) { if (CursorAdapter_EditText.quantity[i].equals("")) { CursorAdapter_EditText.quantity[i] = "0"; } ; int tempQty = Integer .parseInt(CursorAdapter_EditText.quantity[i]); if (tempQty != 0) { mDbHelper.createListItem(listId, itemCursor .getInt(itemCursor .getColumnIndex(GroceryDB.ITEM_ROWID)), tempQty, 0); } i++; itemCursor.moveToNext(); } } }); 

Traté exactamente del mismo problema haciendo lo siguiente:

  1. Eliminar android: descendantFocusability = "beforeDescendants" de xml con ListView, android: windowSoftInputMode = "adjustPan" de AndroidManifest – no es de ayuda.
  2. Subclassed EditText

     public class TrickyEditText extends EditText { private boolean mFocused = false; private boolean mTouched = false; public TrickyEditText(Context context) { super(context); } public TrickyEditText(Context context, AttributeSet attrs) { super(context, attrs); } public TrickyEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public TrickyEditText(Context context, AttributeSet attrs, int defStyleAttr, int style) { super(context, attrs, defStyleAttr, style); } @Override public boolean didTouchFocusSelect() { if (mTouched && mFocused) { return true; } else { return super.didTouchFocusSelect(); } } @Override public boolean onTouchEvent(MotionEvent event) { mTouched = true; return super.onTouchEvent(event); } @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { mFocused = focused; if (!focused) { mTouched = false; } super.onFocusChanged(focused, direction, previouslyFocusedRect); } } 
    1. Código del adaptador

       public class TrickyAdapter extends ArrayAdapter { ............. @Override public View getView(int childPosition, View convertView, final ViewGroup parent) { ......... TrickyEditText et = ..... //initialize edittext et.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(final View v, boolean hasFocus) { if (hasFocus) { v.post(new Runnable() { @Override public void run() { ((EditText)v).selectAll(); } }); } } }); ......... } } 

Aunque está funcionando bastante bien, no es el código de lo que estoy orgulloso … Si alguien conoce una solución más bonita, por favor dígame!

En el método getView de su adaptador, obtenga su EditView (en este código, edittxt) y haga:

  edittxt.post(new Runnable() { public void run() { edittxt.requestFocusFromTouch(); edittxt.selectAll(); InputMethodManager lManager = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE); lManager.showSoftInput(edittxt, 0); } }); 

Lo que puedo decir sobre lo que he preguntado es que intentar seleccionar todo el texto de los editedxts de listview no funciona correctamente. Así que en lugar de seleccionar el texto, muestro un diálogo donde el usuario selecciona el número o lo que sea.

No estoy seguro si usted todavía está buscando una solución, pero encontré una manera de hacerlo. Agregue un oyente de cambio de enfoque al edittext en el método getView de su adaptador y seleccione todo el texto cuando se reciba el enfoque.

 public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; // blah blah blah EditText edit = (EditText) view.findViewById(R.id.editTextId); edit.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View view, boolean hasFocus) { if (hasFocus) ((EditText) view).selectAll(); } }); return view; } 

Había establecido windowSoftInputMode para adjustPan para la actividad, aunque no creo que tenga ninguna relación con este asunto.

He probado esto en Android 2.3 y 4 y funciona.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.