2012-11-28 4 views
15

La mia applicazione continua a bloccarsi quando si digita qualcosa in un EditText, ma ciò non accade sempre solo in alcuni casi. Sto eseguendo la mia app su un Samsung Galaxy Tab 2 10.1 WiFI & 3G (GT-P5100) con Android 4.0.4 (ICS). Io uso la tastiera originale.Arresto anomalo: la ricerca di messa a fuoco ha restituito una vista che non era in grado di mettere a fuoco

Questo è il mio logcat:

11-28 21:43:01.007: E/AndroidRuntime(15540): java.lang.IllegalStateException: focus search returned a view that wasn't able to take focus! 
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.widget.TextView.onKeyUp(TextView.java:5833) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.view.KeyEvent.dispatch(KeyEvent.java:2659) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.view.View.dispatchKeyEvent(View.java:5547) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2027) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1388) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.app.Activity.dispatchKeyEvent(Activity.java:2324) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1954) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3360) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2618) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.os.Looper.loop(Looper.java:137) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at android.app.ActivityThread.main(ActivityThread.java:4514) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at java.lang.reflect.Method.invokeNative(Native Method) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at java.lang.reflect.Method.invoke(Method.java:511) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 
11-28 21:43:01.007: E/AndroidRuntime(15540): at dalvik.system.NativeStart.main(Native Method) 

Questo è il mio uno dei miei EditTexts:

<EditText 
    android:id="@+id/input_ftu_position_other" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="64dp" 
    android:ems="20" 
    android:inputType="text" /> 
+1

Si prega di inviare un po 'di codice. – Codeman

+2

Non so quale codice devo postare perché non so quando il mio codice cronometro – ObAt

risposta

9

ho avuto questo stesso incidente e anche se non suona come la situazione esatta, forse questo sarà ancora utile:

ho avuto due scatole EditText. Quello in basso era il Next Focus Down di quello superiore. In alcune situazioni avrei nascosto la scatola in basso, quindi quando ho colpito la prossima tastiera dalla parte superiore della scatola, avrei cercato di andare in quella inferiore, ma si sarebbe bloccata da quando era nascosta. Ho fissato questo impostando la casella in basso (il bersaglio di un altro EditText successiva verso il basso Focus) come non attivabile:

EditText inputBox = (EditText)findViewById(R.id.Bottom_Box); 
    inputBox.setFocusable(false); 

Spero che questo aiuta.

+1

setFocusable (false) rende EditText non modificabile, meglio impostare una condizione prima per verificare se è necessario modificarlo .. basta aggiungere così potrebbe aiutare un corpo come me ... – praveenb

3

ho un'altra soluzione, per tracciare i codici sorgente TextView e Tabellino di gara l'errore che hai fornito

TextView.java:

if (!hasOnClickListeners()) { 
    View v = focusSearch(FOCUS_DOWN); 

    if (v != null) { 
     if (!v.requestFocus(FOCUS_DOWN)) { 
      throw new IllegalStateException(
        "focus search returned a view " + 
        "that wasn't able to take focus!"); 
     } 
    } 
} 

Di conseguenza, penso che si potrebbe dare View.OnClickListener per evitare l'errore è successo.

ex: textView.setOnClickListener (new OnClickListener);

+0

Mi hai salvato la vita. Grazie mille Genius .... – Ruban

1

Ho avuto questo problema e fissato in questo modo:

public void setEditable(boolean flag) { 
    mEditText.setFocusableInTouchMode(flag); 
    mEditText.setFocusable(flag); 
    mEditText.setClickable(flag); 
} 
5

Questo errore si verifica quando le ImeOptions è impostato su EditorInfo.IME_ACTION_NEXT o EditorInfo.IME_ACTION_PREVIOUS. Mentre il genitore di quella vista non è focheggiabile, o il prossimo oggetto di focus trovato non è focalizzabile.

Chiama per trovare il prossimo oggetto di messa a fuoco che dovrebbe essere rapidamente saltato ma che non esiste o non è focalizzabile, genera questo errore. Succederà se il prossimo è nascosto e quindi non focalizzabile o il genitore non può effettivamente gestire la chiamata a findFocus() e restituisce null.

La soluzione è piuttosto semplice. Non impostarlo su IME_ACTION come prossimo in questo caso. Se non puoi saltare rapidamente dal campo di testo al campo di testo, rendi ciò che è fattibile o cambia l'azione in FATTO.

edittext.setImeOptions(EditorInfo.IME_ACTION_DONE); 

nota il commento nel codice prima che il bit incriminato:

Questa è la gestione per una certa azione di default. Notare che per la compatibilità con backward non viene eseguita questa gestione predefinita se non sono state fornite opzioni esplicite ime , invece di trasformarlo nel normale immettere i codici chiave che un'app potrebbe prevedere.

Non lo farà se si imposta il tipo di edittext o se si fornisce un IME esplicito che non è funzionalmente sbagliato. Oppure avere un oggetto padre che può essere messo a fuoco sul prossimo o su qualsiasi altra cosa. È solo un codice legacy in un bit di fallback che a volte potrebbe non avere l'azione data possibile.

+1

Grazie mille! Non sono riuscito a trovare la causa dello schianto finché non ho letto la tua risposta. Sono stato in grado di risolvere questo problema aggiungendo quanto segue al mio EditText: 'android: imeOptions =" ​​actionDone "' –

+0

Nel mio caso l'arresto si è verificato quando il tasto successivo sulla tastiera virtuale ha tentato di cambiare lo stato attivo da un EditText a un gruppo radio ! impostazione 'android: imeOptions =" ​​actionDone "' su EditText il problema era sparito. Grazie! –

Problemi correlati