webentwicklung-frage-antwort-db.com.de

Bearbeiten von Text in ListActivity ListView verliert den Fokus, wenn die Tastatur aufgerufen wird

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.

24
Physibeth

Alles, was Sie wirklich tun müssen, ist dies auf Ihre ListView anzuwenden:

XML:

Android:descendantFocusability="afterDescendants"

Java:

listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
60
Bojan Kseneman

In meinem Fall hat es perfekt geklappt, wenn man diesen Code zum Manifest hinzugefügt hat:

Android:windowSoftInputMode="adjustPan"
2

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.

0
Wolfcow

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.

0
Anatoliy
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

0

die Recycler-Ansicht funktioniert am besten und Sie müssen nirgendwo mit anderen Eigenschaften herumspielen.

0
Aman Agarwal

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" />
0
Brabbeldas