Imposta Focus su EditText

Ho un EditText-Field e ho impostato un OnFocusChangeListener. Quando ha perso la messa a fuoco, viene chiamato un metodo che controlla il valore di EditText con uno nel database. Se il valore di restituzione del metodo è vero, viene mostrato un toast e il focus deve tornare nuovamente su EditText. Il focus deve sempre tornare sul EditText e la tastiera dovrebbe mostrare, finché il valore di restituzione del metodo non è falso.

EDIT: Penso, non ho ancora messo in modo chiaro il mio vero problema: nessun altro elemento sullo schermo dovrebbe essere in grado di modificare, finché il valore di EditText non viene modificato a un valore, il che rende il metodo "checkLiganame (liganame) "torna falso. Solo il field EditText deve essere modificabile.

  • Differenza di base tra il metodo add () e replace () di Fragment
  • Crittografia Android non funzionante (crittografia PBKDF2WithHmacSHA256 con AES / CBC / PKCS7Padding)
  • onCreate chiamato prima e dopo onActivityResult
  • Scorrimento programmato di un EditText
  • Come riavviare un'attività automaticamente dopo che si blocca?
  • Pulsante Fare clic su Listeners in Android
  • ecco il mio codice (che non funziona per me):

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

    e il metodo:

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

    Questo codice port al risultato seguente: Dopo che il text EditText ha perso la messa a fuoco, la messa a fuoco salta indietro a EditText, ma non posso più modificare il text.

    EDIT2: cambiato il mio codice. Scenario:

    Faccio clic sul primo EditText e inserisco una String in esso, che è già nel database. Il toast sta mostrando. Ora non posso più modificare la mia String. Faccio clic su "successivo" sulla tastiera e il fuoco rimane sul primo EditText. Cerco di modificare la mia string, ma non succede niente. Invece il mio nuovo String sta mostrando nel secondo EditText. Faccio clic sulla freccia posteriore del mio dispositivo e reclick sul primo e secondo EditText -> nessuna tastiera sta visualizzando.

    Ecco il mio nuovo codice:

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

  • Quando i Gettoni GCM scadono e quali sono gli ID istanza?
  • Altre opzioni di libreria di Android TextToSpeech
  • Imansible trovare il metodo android () per argomenti nel progetto Android Studio
  • Conoscere quando viene modificato il text di modifica
  • Android: conti il ​​timer giù ad esempio 10: 00-00: 00? utilizzando OnclickListener a TextView?
  • Rimozione degli extra dall'intento passato
  • 12 Solutions collect form web for “Imposta Focus su EditText”

    Basta mettere questa linea sul tuo onCreate()

     editText.requestFocus(); 

    Funziona per me, spero che aiuta

    La richiesta di messa a fuoco non è sufficiente per visualizzare la tastiera.

    Per get la messa a fuoco e mostrare la tastiera, scrivere qualcosa di simile:

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

    EDIT: Aggiunta di informazioni aggiuntive alla risposta dopo il metodo checkLiganame aggiunto.

    Nel metodo checkLiganame controlla se il cursore è nullo. Il cursore restituirà sempre un object, quindi il controllo per null non fa nulla. Tuttavia il problema è nella linea db.close();

    Quando si chiude la connessione di database, il Cursor diventa non valido e probabilmente viene annullato.

    Quindi chiudere il database dopo aver rilevato il valore.

    Invece di controllare il cursore per null, è necessario verificare se il numero di righe restituite è maggiore di 0: se (cursor.getCount ()> 0) e quindi impostare il valore boolean su true se è così.

    EDIT2: Quindi ecco un codice per come farlo funzionare. EDIT3: Scuso codice sbagliato ho aggiunto …; S

    Innanzitutto, è necessario rimuovere la messa a fuoco se un altro EditText ottiene la messa a fuoco. Ciò può essere fatto con myEditText.clearFocus() . Quindi nel tuo onFocusChangeListener non dovresti veramente preoccuparti se il primo EditText sia concentrato o less, quindi l'onFocusChangeListener potrebbe sembrare qualcosa di simile:

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

    Sostituisci il primo controllo if(liganame.length() == 0) con il tuo controllo, quindi dovrebbe funzionare. Prendi nota che tutte le viste EditText dovrebbero avere impostato il loro onFocusChangeListener allo stesso ascoltatore come ho fatto nell'esempio.

    Il codice Darwind non ha mostrato la tastiera.

    Questo funziona per me:

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

    nel caso in cui la tastiera non sia mostrata, cercare di forzare:

      imm.showSoftInput(_searchText, InputMethodManager.SHOW_FORCED); 

    Ciò modifica il focus di EditText quando si fa clic sul button:

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

    Se creiamo un EditText in modo dinamico, dobbiamo impostare la requestFocus () come indicato di seguito.

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

    Se già abbiamo dichiarato il componente nella visualizzazione xml, allora dobbiamo trovarlo e possiamo mettere a fuoco come indicato di seguito.

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

    Imposta solo l'attenzione sul corrispondente componente EditText.

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

    Non so se hai trovato una soluzione, ma per il tuo problema di modifica dopo aver richiesto di nuovo la messa a fuoco:

    Hai provato alla chiamata il metodo selectAll() o setSelection(0) (se è emtpy) sul tuo edittext1?

    Fathemes sapere se questo aiuterà, in modo da modificare la mia risposta a una soluzione 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(); } }); 

    Per Xamarin.Android ho creato questa estensione.

     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); } } } 
     new OnEditorActionListener(){ @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { editText.requestFocus(); //used ******* return true ****** return **true**; } } 

    Potresti farlo con una sola row:

     yourEditText.RequestFocusFromTouch(); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.