Ich habe nach einer Antwort auf diese Frage gesucht und gesucht, und alles, was wie eine Antwort aussah, hat nicht funktioniert. Ich schätze, ich werde einfach fragen.
Ich habe ein paar EditText
Felder zu einer ListView
hinzugefügt, die die Basis für eine ListActivity
sind. Wenn ich die windowSoftInputMode
auf adjustPan
setze und in eine EditText
klicke, funktioniert das so lange, bis Sie erneut darauf klicken und die Tastatur es verdeckt. Wenn ich adjustResize
verwende, funktioniert es, außer wenn die Tastatur aufgerufen wird, verliert die EditText
den Fokus und ich muss erneut darauf tippen, um zu tippen.
Ich habe versucht herauszufinden, wie man die onResize
fängt, aber das scheint mit der Ansicht und nicht mit der Aktivität verbunden zu sein, und ich bin nicht ganz sicher, wie ich darauf hören soll. Ich habe auch alle möglichen fokussierbaren Einstellungen für die EditText
-Felder und die ListView
selbst (wie in anderen von mir gelesenen Beiträgen vorgeschlagen) versucht, die auch nicht zu helfen scheinen.
Alles, was Sie wirklich tun müssen, ist dies auf Ihre ListView anzuwenden:
XML:
Android:descendantFocusability="afterDescendants"
Java:
listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
In meinem Fall hat es perfekt geklappt, wenn man diesen Code zum Manifest hinzugefügt hat:
Android:windowSoftInputMode="adjustPan"
Haben Sie versucht, nachdem Sie adjustResize
ausgeführt haben, den Fokus auf die EditText
zurückzusetzen, indem Sie so etwas wie EditText.requestFocus();
ausführen, damit sie wieder den Fokus hat und der Benutzer nicht erneut darauf tippen muss. Sie können EditText.isFocused()
verwenden, um zu prüfen, ob es in einer Debug-Protokollanweisung oder ähnlichem fokussiert ist (true) oder nicht (false).
möglicherweise müssen Sie das Feld auch mit SetFocusable()
auf focusable
einstellen. Seien Sie jedoch vorsichtig, da dies möglicherweise den Fokus von der ListView
selbst wegnimmt und verhindert, dass Sie später scrollen oder Dinge auswählen können, sodass Sie mit der Einstellung herumspielen müssen fokussierbar und fokussiert zeug.
Ich habe genau das gleiche Problem in meinem Projekt erlebt.
Um das Problem zu beheben, habe ich die EditText
in Unterklassen unterteilt und die Schaltfläche "Zurück" gedrückt, um sicherzustellen, dass meine EditText
in diesem Moment den Fokus löscht.
Überprüfen Sie diese Lösung , wie es geht.
Viel Glück.
mViewHolder.editText = (EditText)convertView.findViewById(R.id.editText1);
mViewHolder.editText.setTag(position);
mViewHolder.editText.setTextColor(0xFF000000);
mViewHolder.editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
EditText et =(EditText)v.findViewById(R.id.editText1);
editTextArrayList.set(position,et.getText().toString().trim());
}
}
});
Hallo Link unten kann für Sie helfen http://mylearnandroid.blogspot.in/2014/06/listview-problem-while-scrolling.html
die Recycler-Ansicht funktioniert am besten und Sie müssen nirgendwo mit anderen Eigenschaften herumspielen.
Für mich hat mir eine Kombination aus Folgendem geholfen (insbesondere Nummer 3):
1) Fügen Sie der zugehörigen Aktivität in der Manifestdatei Folgendes hinzu. Dies ist erforderlich, damit die Größe Ihrer ListView so geändert werden kann, dass nur der Bereich über dem SoftKeyboard ausgefüllt wird:
Android:windowSoftInputMode="adjustResize"
2) Mit dem folgenden Befehl erhält ListView NUR den Fokus, wenn keiner seiner Nachkommen dies wünscht. Die Nachkommen (der EditText) müssen den Fokus bekommen und behalten.
<ListView
...
Android:descendantFocusability="afterDescendants"/>
3) Durch das automatische Ein-/Ausblenden der Leiste für Rechtschreibvorschläge direkt über der Tastatur wird die ListView immer wieder aktualisiert. Ich habe die Vorschläge für jeden EditText in meiner ListView deaktiviert.
<EditText
...
Android:inputType="textNoSuggestions|textVisiblePassword" />