Establecer el foco en EditText

Tengo un EditText-Field y configuré un OnFocusChangeListener para él. Cuando pierde el foco, se llama a un método que verifica el valor de 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 a aparecer en EditText. El enfoque siempre debe volver a EditText y el teclado debe mostrarse, hasta que el valor de retorno del método sea falso.

EDITAR: Creo que todavía no he aclarado mi verdadero problema: ningún otro elemento en la pantalla debería poder editarse, hasta que el valor de EditText se edite en un valor, lo que hace que el método “checkLiganame (liganame)” ” falso retorno. Solo EditText-Field debería 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 EditText ha perdido el foco, el foco salta de nuevo a EditText, pero ya no puedo editar el texto.

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

Hago clic en el primer EditText y pongo un String en él, que ya está en la base de datos. La tostada está mostrando. Ahora no puedo editar mi cadena más. Hago clic en “siguiente” en el teclado y el foco permanece en el primer EditText. Intento editar mi String, pero no pasa nada. En cambio, mi nueva cadena se muestra en el segundo EditText. Hago clic en la flecha hacia atrás de mi dispositivo y reclick en el primer y segundo EditText -> no se muestra el 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(); } } } 

Simplemente ponga esta línea en su onCreate()

 editText.requestFocus(); 

Funciona para mí, espero que ayude

Solicitar foco no es suficiente para mostrar el teclado.

Para enfocarte y mostrar el teclado, escribirías algo como esto:

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

EDITAR: Agregar información extra a la respuesta después de que se agregó el método checkLiganame.

En el método checkLiganame, comprueba 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 la base de datos, el Cursor deja de ser válido y probablemente se anula.

Así que cierre la base de datos después de que haya obtenido el valor.

En lugar de buscar el nulo en el cursor, debe verificar si el número de filas devuelto es mayor que 0: if (cursor.getCount ()> 0) y luego establecer su booleano en verdadero si es así.

EDIT2: Aquí hay un código sobre cómo hacerlo funcionar. EDIT3: Lo siento código incorrecto que agregué …; S

En primer lugar, debes despejar el foco si otro EditText obtiene el foco. Esto se puede hacer con myEditText.clearFocus() . Luego, en su onFocusChangeListener, no debería preocuparse realmente si EditText tiene foco o no, por lo que el OnFocusChangeListener podría verse más o menos así:

 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 de que todas las vistas de EditText deberían haber configurado su onFocusChangeListener de onFocusChangeListener de onFocusChangeListener en el mismo oyente como he hecho en el ejemplo.

El código de Darwind no mostró 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 se muestre, intente forzar:

  imm.showSoftInput(_searchText, InputMethodManager.SHOW_FORCED); 

Esto cambia el enfoque de 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(); } }); } } 

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

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

Si ya declaramos el componente en la vista xml, entonces tenemos que encontrarlo y podemos enfocarlo como se indica a continuación.

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

Establece solo foco en el componente EditText correspondiente.

  mEditText.setFocusableInTouchMode(true); mEditText.requestFocus(); if(mEditText.requestFocus()) { getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); } 
  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(); } }); 

Esto funciona de mi parte:

 public void showKeyboard(final EditText ettext){ ettext.requestFocus(); ettext.postDelayed(new Runnable(){ @Override public void run(){ InputMethodManager keyboard=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); keyboard.showSoftInput(ettext,0); } } ,200); } 

Esconder:

 private void hideSoftKeyboard(EditText ettext){ InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(ettext.getWindowToken(), 0); } 
  private void requestFocus(View view) { if (view.requestFocus()) { getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); } } //Function Call requestFocus(yourEditetxt); 

Esto es lo que funcionó para mí, establece el enfoque y muestra el teclado también

 EditText userNameText = (EditText) findViewById(R.id.textViewUserNameText); userNameText.setFocusable(true); userNameText.setFocusableInTouchMode(true); userNameText.requestFocus(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(userNameText, InputMethodManager.SHOW_IMPLICIT); 

No sé si ya encontró una solución, pero para su problema de edición después de volver a solicitar atención:

¿Has intentado llamar al método selectAll() o setSelection(0) (si es emtpy) en tu edittext1?

Por favor, avíseme si esto ayuda, por lo que voy a editar mi respuesta a una solución completa.

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); } } } 

por favor prueba este código en manifiesto

   
 new OnEditorActionListener(){ @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { editText.requestFocus(); //used ******* return true ****** return **true**; } } 

Puedes hacer esto con una sola línea:

 yourEditText.RequestFocusFromTouch();