ListView-Elemente konzentrieren Verhalten
Ich versuche zu schaffen, eine ListView
(mit custom CursorAdapter
) EditText
Elemente, so dass EditTexts
erscheinen nicht auf den ersten und editierbar auf lange auf. Dann würde der Benutzer Bearbeiten EditText
Inhalt und EditText
würde speichern Sie die änderungen der db-bei Fokus-Verlust. Aber ich habe laufen in eine wirklich unangenehme Verhalten, dass mich daran hindert, dies zu tun.
1) ich habe eingestellt, dass meine EditTexts
zu android:focusable="false"
und android:focusableInTouchMode="false"
im XML-Format.
2) ich habe eine OnItemLongClickListener
in meinem ListActivity
dass Folgendes macht:
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
{
Log.d("NLAc", "longClick called");
EditText et = (EditText) view.findViewById(R.id.etFolderName);
et.setFocusable(true);
et.setFocusableInTouchMode(true);
return true;
}
3) Und wenn ich Ansichten erstellen, in meinem adapter lege ich die folgenden Fokus-change-listener:
public void onFocusChange(View v, boolean hasFocus)
{
if (hasFocus)
{
EditText et = (EditText)v;
Log.d(TAG, "hasFocus true called " + et.getText());
et.setText("focused");
et.setSelection(et.length());
}
else
{
EditText et = (EditText)v;
Log.d(TAG, "hasFocus false called " + et.getText());
et.setText("unfocused");
et.setFocusableInTouchMode(false);
//TODO Save to DB
}
}
Was passiert, ist, dass wenn ich lange auf das erste Element bekomme ich Folgendes im log:
longClick called
hasFocus true called item1
hasFocus false called focused
Wenn ich die Zeile entfernen die Einstellung Isoliertes false (et.setFocusableInTouchMode(false);
) bekomme ich ein anderes hasFocus true called unfocused
.
Offenbar gehen die Dinge wie diese:
1) EditText
Fokus erhält, wenn set justierbares
2) LinearLayour
mit meinem ListView
Fokus verliert und fordert interne unFocus()
auf alle Kinder, einschließlich meiner EditText
3) EditText
Fokus verliert
4) EditText
Fokus erhält - aus welchem Grund auch immer jetzt.
Dieses Verhalten hindert mich, deaktivieren EditText
bei Fokus-Verlust bzw. unfocusable, bis der nächste lange auf, kommt durch, die ist, was ich will.
Kann jemand empfehlen, was ich möglicherweise fehlen? Oder erklären Sie dieses Verhalten? Alle Lösungen geschätzt.
Ich denke über das hinzufügen von ein wenig "fertig" button, aber ich hatte wirklich gehofft, ich könnte nur sparen Sie auf alles andere, wie Fokus verlieren oder 'enter' auf der soft-Tastatur.
Ich verstehe, aber ich würde wirklich empfehlen, sich auf ux.stackexchange.com/questions/8868/... und natürlich androidpatterns.com und hier geht GEBEN Sie Ihre soft-KB-Taste stackoverflow.com/questions/4451374/...
Vielen Dank für die interessanten links, aber ich bin trotzdem begierig, zu verstehen, was Los ist mit den Fokus 🙂
InformationsquelleAutor devmiles.com | 2012-01-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
War ich in der Lage, einige Fortschritte erzielt durch die Verwendung von zwei Ansichten übereinander. Ich bin mit einem TextView für unscharfe display, und ich es verstecken, und zeigen ein EditText statt auf lange geklickt. Aber das hat nicht wirklich helfen, zunächst mit ListView ist wirklich komisch, Fokus-handling bis ich habe experimentierte mit
android:descendantFocusability
Einstellung definiert für ViewGroups. Nachdem ich es eingestellt habe zuViewGroup.FOCUS_AFTER_DESCENDANTS
Verhalten wurde viel mehr vorhersehbar, zumindest für mich.InformationsquelleAutor devmiles.com
OK. Hier ist Ihr code. hoffe, dass es Ihren Bedürfnissen entspricht oder zumindest das ist, was ich bekommen habe von deinem post 🙂
Spaß haben.
das ist genau das, was es tut. haben Sie versucht, zu kompilieren und zu testen?
Ich habe aktualisiert, der code zu machen, bis die richtigen Deaktivierung der Bearbeitung und zeigt weiche Tastatur. Sollte es in Ordnung sein jetzt. Getestet auf meinem Handy mit 2.2.2 + emulator auf 2.3.3
Nun, jetzt ist Ihre EditTexts sind fokussierbar und aktiviert, aber kann nicht bearbeitet werden, nicht wirklich das, was ich gesucht habe 🙂
Wenn Sie wollen, dass Sie setEnabled(false) - es wird nicht funktionieren auf diese Weise - Sie werden deaktiviert, für alles, was für irgendwelche Klicks oder was auch immer. Wenn Sie nicht fokussierbar, die Sie nicht in der Lage, Tippen Sie auf Sie erneut, und führen Sie Ihre onLongClicks onClicks wieder. Sie können spielen, mit hintergrund-Bilder, wenn Sie nicht bearbeitet werden, um einen Hinweis für einen Benutzer. Ansonsten solltest du überdenken, Ihr design vielleicht.
InformationsquelleAutor Sergey Benner