2013-02-09 1 views
5

ho letto in giro circa le domande su come impostare un oggetto da mettere a fuoco però non riesco a trovare né una risposta a quello che sto cercando di fare.come forzare attenzione per modificare il testo

Utilizzo della messa a fuoco Listener ho fatto quanto segue:

Ehour.setOnFocusChangeListener(new OnFocusChangeListener() { 

     @Override 
     public void onFocusChange(View arg0, boolean arg1) { 
      // TODO Auto-generated method stub 
      if (!arg1) { 
       if (Ehour.getText().length()<=0) { 
        Toast.makeText(getApplicationContext(), "No Hour Entered", Toast.LENGTH_LONG).show(); 
        Calendar nohour = Calendar.getInstance(); 
        Ehour.setText(numberformatter(nohour.get(Calendar.HOUR_OF_DAY))); 
Ehour.setFocusable(true); 
Ehour.requestFocus(); 


       } 
      } 
     }}); 

ho provato i suggerimenti dai pali seguire:

ho letto questo post, ma utilizzando questi suggerimenti e non sembrano lavoro: How to set focus on a view when a layout is created and displayed?

Il mio obiettivo è che quando il focus del testo di modifica viene perso, ho bisogno di tornare ad esso se la voce data non è valida.

Inoltre secondo il suggerimento dato da Bill Mote ho anche provato:

Ehour.setOnFocusChangeListener(new OnFocusChangeListener() { 

     @Override 
     public void onFocusChange(View arg0, boolean arg1) { 
      // TODO Auto-generated method stub 
      if (!arg1) { 
       if (Ehour.getText().length()<=0) { 
        Toast.makeText(getApplicationContext(), "No Hour Entered", Toast.LENGTH_LONG).show(); 
        Calendar nohour = Calendar.getInstance(); 
        Ehour.setText(numberformatter(nohour.get(Calendar.HOUR_OF_DAY))); 

        ((EditText)arg0).requestFocus(); 

       } 
      } 
     }}); 

** EDIT ** Ho anche aggiunto la riga sotto la prima requestFocus():

((EditText)arg0).setFocusable(true); 

*** EDIT ****

Provato da questo post: Stop EditText from gaining focus at Activity startup

le seguenti modifiche: Nel layout alla prima intestazione di layout ho aggiunto:

android:id="@+id/enterdata" 
android:descendantFocusability="beforeDescendants" 
android:focusableInTouchMode="true" 

Poi nel OnChangeFocusListener ho fatto questo:

Ehour.setOnFocusChangeListener(new OnFocusChangeListener() { 

     @Override 
     public void onFocusChange(View arg0, boolean arg1) { 
      // TODO Auto-generated method stub 
      if (!arg1) { 
       if (((EditText)arg0).getText().length()<=0) { 
        Toast.makeText(getApplicationContext(), "No Hour Entered", Toast.LENGTH_LONG).show(); 
        Calendar nohour = Calendar.getInstance(); 
        ((EditText)arg0).setText(numberformatter(nohour.get(Calendar.HOUR_OF_DAY))); 
        findViewById(R.id.enterdata).requestFocus(); 
        ((EditText)arg0).setFocusable(true); 
        ((EditText)arg0).setFocusableInTouchMode(true); 
        ((EditText)arg0).requestFocus(); 

       } 
      } 
     }}); 

Tuttavia ho ancora ottenere lo stesso comportamento di prima, il testo di modifica su cui si concentra l'attenzione rimane in questo modo, ma il testo di modifica su cui voglio focalizzare l'attenzione sembra concentrato ma non sembra essere usato come se fosse ancora in attesa di essere focalizzato.

*** EDIT ****

codice qui sotto come da recente post trovate sul StackOverflow dove l'utente che ha fatto la domanda sta vivendo lo stesso problema come me:

Ehour.setOnFocusChangeListener(new OnFocusChangeListener() { 

     @Override 
     public void onFocusChange(View arg0, boolean arg1) { 
      // TODO Auto-generated method stub 
      if (!arg1) { 
       if (((EditText)arg0).getText().length()<=0) { 

        Calendar nohour = Calendar.getInstance(); 
        ((EditText)arg0).setText(numberformatter(nohour.get(Calendar.HOUR_OF_DAY))); 
        if (((EditText)arg0).requestFocus()) { 
         getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 
         Emin.clearFocus(); 
         Toast.makeText(getApplicationContext(), "No Hour Entered", Toast.LENGTH_LONG).show(); 
        } 


       } 
      } 
     }}); 
+0

Guardando questo post: http: // StackOverflow.it/questions/1555109/stop-edittext-from-gaining-focus-at-activity-startup Ho provato le risposte che aggiungerò alla mia domanda – TimCS

+0

Ho anche provato a codificare tutte le caselle di testo per cancellare mettere a fuoco e impostare setFocusable e setFocusableInTouchMode su false ma il comportamento è sempre lo stesso, sembra che il testo di modifica su cui voglio focalizzare l'attenzione sia focalizzato, ma qualsiasi digitazione finisce nel testo di modifica che l'utente si sposterà !!!!! AIUTO!!!! – TimCS

+0

Appare in questo post: http: //stackoverflow.com/questions/14327412/set-focus-on-edittext? Rq = 1 l'utente ha avuto lo stesso problema e non sembra che sia stato risolto, tuttavia sto andando per provare i suggerimenti qui per vedere se funzionano per me – TimCS

risposta

3

Prova arg0.requestFocus().

Non sono sicuro se View implementa requestFocus() fuori dalla parte superiore della mia testa in modo potrebbe essere necessario lanciarlo ... ((EditText) arg0).requestFocus().

+0

ho detto nella mia domanda, provato come hai suggerito con gli stessi risultati di – TimCS

+0

Il comportamento dei due testi di modifica mi sembra strano in quanto quello a cui voglio tornare sembra focalizzato e sembra avere un cursore contro di esso ma il quello su cui è stato spostato lo zoom sembra essere lo stesso, anche se "clicco" di nuovo in quello che voglio usare il testo di modifica che non cambia questo – TimCS

+0

Mi sembra che lì sembra essere ora intorno a questo. Quindi dovrò provare a fare controlli di validazione al punto di accettare il record invece di controllarlo nel momento in cui l'utente si allontana dal campo. Questo è su Android 2.2 quindi non sono sicuro se si estende a 4 – TimCS

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

Ho avuto questo stesso problema, ecco il codice che ho usato per risolvere:

EditText editText = (EditText) findViewById(R.id.myTextViewId); 
editText.requestFocus(); 
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); 

migliori saluti,