2012-04-11 2 views
0

Ich habe eine EditText, die ich als Fußzeile View für meine ListView verwenden. Ich versuche, auf die Fokus-/Verlierer-Fokusereignisse zuzugreifen, aber aus irgendeinem Grund wird mehrmals pro Fokus ausgelöst. Was geht hier vor sich?Android - ListView EditText Fokus Probleme

// in onCreate 

// ... 

// the footer 
View v = getLayoutInflater().inflate(R.layout.comment_edittext, null); 

EditText commentEditText = (EditText)v.findViewById(R.id.comment_edittext); 
commentEditText.setOnFocusChangeListener(new OnFocusChangeListener() { 

    @Override 
    public void onFocusChange(View v, boolean hasFocus) 
    { 
     U.log("View: " + v.getClass().getName().toString()); 

     if(hasFocus) 
     { 
      U.log("Clicked"); 
     } 
     else 
     { 
      U.log("Un Clicked"); 
     } 
    } 
}); 

// add the footer 
commentListView.addFooterView(v); 

// ... 

Der Ausgang einer einzelnen Note, die die Tastatur bringt ist:

04-11 10:22:17.449: E/004 - X(4576): View: android.widget.EditText 
04-11 10:22:17.459: E/004 - X(4576): Clicked 
04-11 10:22:17.569: E/004 - X(4576): View: android.widget.EditText 
04-11 10:22:17.569: E/004 - X(4576): Un Clicked 
04-11 10:22:17.569: E/004 - X(4576): View: android.widget.EditText 
04-11 10:22:17.569: E/004 - X(4576): Clicked 
04-11 10:22:17.689: E/004 - X(4576): View: android.widget.EditText 
04-11 10:22:17.689: E/004 - X(4576): Un Clicked 
04-11 10:22:17.709: E/004 - X(4576): View: android.widget.EditText 
04-11 10:22:17.709: E/004 - X(4576): Clicked 

kann ich irgendwie verstehen es mehrere Ereignisse mit hasFocus Set true Aufruf, aber warum sind dann auch false s, Triggerung der Un Clicked Protokoll?

EDIT: Außerdem, wenn ich scrollen ListView nach oben und unten, die EditText bewegt sich in und aus Sicht heraus, es ist diese Ereignisse als auch anrufen. Benutze ich vielleicht den falschen Listenertyp?

+0

meine Vermutung ist Ihre OnCreate-Methode wird mehrmals aufgerufen. – njzk2

Antwort

1

Aus eigener Erfahrung, EditTexts in ListViews sind ein Fluch. Aufgrund der Art und Weise, wie Ansichten recycelt und gerendert werden, verhält sich der Fokus merkwürdig. Ich empfehle, das Problem auf andere Weise anzugehen. Eigentlich, wenn es ein Kommentar-Textfeld ist, wäre es nicht besser, wenn es immer sichtbar wäre?

Beispielanordnung:

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <ListView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="1"/> 
    <EditText 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 
    </LinearLayout> 
+0

Mein erster Versuch war, es nur nach dem ListView in die XML-Datei meines Layouts zu platzieren. Es würde jedoch nicht funktionieren, also dachte ich, dass es etwas mit der Abwärtsentwicklung des ListView zu tun hat. Wenn es einen Weg gibt, dies zu tun, wäre ich dafür offen. – Josh

+0

Hinzugefügt das Layout, das ich für genau den gleichen Zweck verwende. – dmon

1

ein Gridview statt verwenden und eine numColumns von 1. geben Wenn Sie nicht, wie das in Ihrer Java-Klassen liest, speichert sie als AbsListView (und halten sie genauso eine GridView in Ihrem XML).

ListView ist fehlerhaft mit EditTexts, GridViews fehlen diese Probleme.

+0

Versuchte dies ohne irgendeinen Unterschied zu sehen – Joakim

0

Die Verwendung von Grideview mit numColumns von 1 ist der perfekte Weg, um das Problem zu lösen. Ich habe es versucht und mein Problem gelöst.