web-dev-qa-db-ja.com

ListActivityでテキストを編集するListViewは、キーボードが起動するとフォーカスを失います

私はこの質問に対する答えを検索して検索しましたが、答えのように見えたものはすべて機能しなかったので、私はただ尋ねると思います。

EditTextの基礎となるListViewにいくつかのListActivityボックスを追加しました。 windowSoftInputModeadjustPanに設定し、EditTextをクリックすると、もう一度クリックしてキーボードがカバーするまで機能します。 adjustResizeを使用すると、キーボードが起動したときにEditTextがフォーカスを失い、もう一度タップして入力する必要がある場合を除いて、機能します。

onResizeをキャッチする方法を見つけようとしていましたが、それはアクティビティではなくビューに関連しているようで、それを聞く方法が完全にはわかりません。また、EditTextボックスとListView自体(私が読んだ他の投稿で示唆されているように)で、どちらも役に立たないように見える、あらゆる種類のフォーカス可能な設定を試しました。

26
Physibeth

あなたが本当にする必要があるのはあなたのListViewにこれを適用することです:

XML:

Android:descendantFocusability="afterDescendants"

Java:

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

私の場合、このようなコードをマニフェストに追加すると完璧に機能しました。

Android:windowSoftInputMode="adjustPan"
2

私にとって、以下の組み合わせが私を助けました(特に3番目):

1)マニフェストファイルの関連アクティビティに以下を追加します。これは、リストビューのサイズを変更して、softKeyboardの上の領域のみを埋めるために必要です。

Android:windowSoftInputMode="adjustResize"

2)以下では、ListViewは、その子孫のいずれもそれを望まない場合にのみフォーカスを取得します。子孫(EditText)は、フォーカスを取得して維持する必要があります。

<ListView
...
Android:descendantFocusability="afterDescendants"/>

3)キーボードの真上にあるスペル候補バーの自動表示/非表示により、ListViewがトリガーされ続けて更新されます。 ListViewのEditTextの提案をオフにしました。

<EditText
...
Android:inputType="textNoSuggestions|textVisiblePassword" />
1
Brabbeldas

adjustResizeを実行した後、EditText.requestFocus();のような操作を実行して、フォーカスをEditTextにリセットし、再びフォーカスがあり、ユーザーがフォーカスを持たないようにします。もう一度タップします。 EditText.isFocused()を使用して、デバッグログステートメントなどでフォーカスされているか(true)、フォーカスされていないか(false)を確認できます。

SetFocusable()を使用してフィールドをfocusableに設定する必要がある場合もありますが、これによりListView自体からフォーカスが奪われ、使用できなくなる可能性があるため、注意が必要です。後でスクロールまたは選択するために、フォーカス可能な設定を試してみる必要があり、フォーカスされたものになります。

0
Wolfcow

私のプロジェクトでもまったく同じ問題が発生しました。

この問題を解決するために、EditTextをサブクラス化し、[戻る]ボタンを押して処理しました。その時点でEditTextclearsがフォーカスをクリアしていることを確認します。

それを行う方法について、 この解決策 を確認してください。

幸運を。

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());
                    }
                }
            });

こんにちは以下のリンクがあなたを助けるかもしれません http://mylearnandroid.blogspot.in/2014/06/listview-problem-while-scrolling.html

0

リサイクラービューが最適に機能し、他のプロパティをいじくり回す必要はありません。

0
Aman Agarwal