Establecer foco en EditText

Tengo un campo de EditText y fijar un OnFocusChangeListener para él. Cuando se ha perdido el enfoque, se llama a un método, que comprueba el valor del EditText con uno en la base de datos. Si el valor de retorno del método es verdadero, se muestra un brindis y el foco debe volver al EditText de nuevo. El enfoque siempre debe volver a la EditText y el teclado debe mostrar, hasta que el valor de retorno del método es falso.

EDIT: Creo, no he hecho mi problema real perfectamente claro todavía: Ningún otro elemento en la pantalla debe ser capaz de editar, hasta que el valor de la EditText se edita a un valor, lo que hace que el método "checkLiganame (liganame) " falso retorno. Sólo el campo EditarTexto debe ser editable.

Aquí está mi código (que no funciona para mí):

final EditText Liganame = (EditText) findViewById(R.id.liganame); Liganame.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { String liganame = Liganame.getText().toString(); if (checkLiganame(liganame)) { Toast toast = Toast.makeText(CreateTableActivity.this, "Dieser Liganame ist bereits vergeben", Toast.LENGTH_SHORT); toast.show(); Liganame.requestFocus(); } } 

Y el método:

 public boolean checkLiganame(String liganame) { boolean found = false; DatabaseHelper databaseHelper = new DatabaseHelper(this); SQLiteDatabase db = databaseHelper.getReadableDatabase(); Cursor cursor = db.query("liga", new String[] { "liganame" }, "liganame = '" + liganame + "'", null, null, null, null); Log.i("Liganame: ", String.valueOf(cursor)); db.close(); if (cursor != null) { found = true; } return found; } 

Este código conduce al siguiente resultado: Después de que el EditText ha perdido el foco, el enfoque vuelve a saltar a EditText, pero ya no puedo editar el texto.

EDIT2: Cambiado mi código. Guión:

Hago clic en el primer EditText y pongo una String en él, que ya está en la base de datos. El brindis está mostrando. Ahora ya no puedo editar mi String. Hago clic en "siguiente" en el teclado y el enfoque se queda en el primer EditarTexto. Intento editar mi cadena, pero no pasa nada. En lugar de eso, mi nueva String se muestra en el segundo EditText. Hago clic en la flecha hacia atrás de mi dispositivo y me reclico en el primer y segundo EditarTexto -> no se muestra ningún teclado.

Aquí está mi nuevo Código:

 public class CreateTableActivity extends Activity implements OnFocusChangeListener { private EditText Liganame, Mannschaftsanzahl; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.create_league); Liganame = (EditText) findViewById(R.id.liganame); Liganame.setOnFocusChangeListener(this); Mannschaftsanzahl = (EditText) findViewById(R.id.mannschaftsanzahl); Mannschaftsanzahl.setOnFocusChangeListener(this); final Button save_button = (Button) findViewById(R.id.create_tabelle_speichern_button); OnClickListener mCorkyListener = new OnClickListener() { public void onClick(View v) { ButtonClick(); } }; save_button.setOnClickListener(mCorkyListener); } @Override public void onFocusChange(View v, boolean hasFocus) { String liganame = Liganame.getText().toString(); if (checkLiganame(liganame)) { if (Liganame.requestFocus()) { getWindow() .setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); Mannschaftsanzahl.clearFocus(); Toast.makeText(CreateTableActivity.this, "Dieser Liganame ist bereits vergeben", Toast.LENGTH_SHORT).show(); } } } 

Sólo tiene que poner esta línea en su onCreate()

 editText.requestFocus(); 

Funciona para mí, espero que ayude

Solicitar el enfoque no es suficiente para mostrar el teclado.

Para obtener el enfoque y mostrar el teclado que escribir algo como esto:

 if(myEditText.requestFocus()) { getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); } 

EDIT: Agregar información adicional a la respuesta después de agregar el método checkLiganame.

En el método checkLiganame verifica si el cursor es nulo. El cursor siempre devolverá un objeto, por lo que la comprobación de null no hace nada. Sin embargo, el problema está en la línea db.close();

Cuando cierra la conexión de base de datos, el Cursor convierte en no válido y lo más probable es nulled.

Cierre la base de datos después de haber obtenido el valor.

En lugar de comprobar el cursor para null, debe comprobar si el número de filas devueltas es mayor que 0: if (cursor.getCount ()> 0) y, a continuación, establezca su valor booleano en true si es así.

EDIT2: Así que aquí está un código para saber cómo hacerlo funcionar. EDIT3: Lo siento código incorrecto He añadido …; S

Primero apagado, usted necesita aclarar el foco si otro EditText consigue el foco. Esto se puede hacer con myEditText.clearFocus() . Entonces en su onFocusChangeListener usted no debe importar realmente si primer EditText tiene el foco o no, así que el onFocusChangeListener podría parecer algo similar:

 public class MainActivity extends Activity implements OnFocusChangeListener { private EditText editText1, editText2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText1 = (EditText) findViewById(R.id.editText1); editText1.setOnFocusChangeListener(this); editText2 = (EditText) findViewById(R.id.editText2); editText2.setOnFocusChangeListener(this); } @Override public void onFocusChange(View v, boolean hasFocus) { String liganame = editText1.getText().toString(); if(liganame.length() == 0) { if(editText1.requestFocus()) { getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); editText2.clearFocus(); Toast.makeText(MainActivity.this, "Dieser Liganame ist bereits vergeben", Toast.LENGTH_SHORT).show(); } } } } 

Reemplace el primer cheque if(liganame.length() == 0) con su propio cheque, entonces debería funcionar. Tome nota, que todas las vistas de EditText deben haber establecido su onFocusChangeListener al mismo oyente como he hecho en el ejemplo.

El código Darwind no muestra el teclado.

Esto funciona para mí:

  _searchText.requestFocus(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(_searchText, InputMethodManager.SHOW_IMPLICIT); 

En caso de que el teclado no esté mostrando, intente forzar:

  imm.showSoftInput(_searchText, InputMethodManager.SHOW_FORCED); 

Esto cambia el foco del EditText cuando se hace clic en el botón:

 public class MainActivity extends Activity { private EditText e1,e2; private Button b1,b2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); e1=(EditText) findViewById(R.id.editText1); e2=(EditText) findViewById(R.id.editText2); e1.requestFocus(); b1=(Button) findViewById(R.id.one); b2=(Button) findViewById(R.id.two); b1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { e1.requestFocus(); } }); b2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { e2.requestFocus(); } }); } } 
  mEditText.setFocusableInTouchMode(true); mEditText.requestFocus(); if(mEditText.requestFocus()) { getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); } 

Si creamos un EditText dinámicamente entonces tenemos que fijar el requestFocus () como se indica a continuación.

  EditText editText = new EditText(this); editText.setWidth(600); editText.requestFocus(); 

Si ya hemos declarado el componente en la vista xml entonces tenemos que encontrarlo y podemos centrarnos como se indica a continuación.

 EditText e1=(EditText) findViewById(R.id.editText1); e1.requestFocus(); 

Establece sólo el foco al componente EditText correspondiente.

  private void requestFocus(View view) { if (view.requestFocus()) { getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); } } //Function Call requestFocus(yourEditetxt); 

No sé si usted ya encontró una solución, pero para su problema de edición después de solicitar el enfoque de nuevo:

¿Ha intentado la llamada el método selectAll() o setSelection(0) (si es emtpy) en su edittext1?

Por favor, hágamelo saber si esto ayuda, así que voy a editar mi respuesta a una solución completa.

  Button btnClear = (Button) findViewById(R.id.btnClear); EditText editText1=(EditText) findViewById(R.id.editText2); EditText editText2=(EditText) findViewById(R.id.editText3); btnClear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { editText1.setText(""); editText2.setText(""); editText1.requestFocus(); } }); 
 new OnEditorActionListener(){ @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { editText.requestFocus(); //used ******* return true ****** return **true**; } } 

Para Xamarin.Android he creado esta extensión.

 public static class ViewExtensions { public static void FocusEditText(this EditText editText, Activity activity) { if (editText.RequestFocus()) { InputMethodManager imm = (InputMethodManager)activity.GetSystemService(Context.InputMethodService); imm.ShowSoftInput(editText, ShowFlags.Implicit); } } } 

Usted podría hacer esto con una sola línea:

 yourEditText.RequestFocusFromTouch(); 
  • Deshabilitar temporalmente EditText
  • Android WebKit enfocado textarea no dibujar imagen de fondo
  • Mostrar el teclado automáticamente
  • Problema de enfoque con múltiples EditTexts
  • Solicitar enfocar en editar texto
  • SearchView quita la línea de enfoque azul y muestra el cursor en determinada posición
  • androide. Visualización de enfoque automático en el inicio de la actividad
  • ListView en SlidingDrawer pierde foco después de onResume
  • Mover Android Edittext un poco hacia arriba cuando se centran en él
  • Grupo de radio no está recibiendo el foco en Android
  • Cómo puedo fijar el foco (y exhibir el teclado) en mi EditText programmatically
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.