ListView のフォーカスの問題


このセクションの概要

ListView の項目に Button、CheckBox、EditText、その他のコントロールを追加する場合は、次のことを考慮するとよいでしょう。 問題点:ListViewのフォーカス問題へ!このセクションでは、この問題を解決するいくつかの方法を学びます。

Button、CheckBox、EditText を含む単純な listView を作成できますが、クリックすると次のことがわかります。 ListView 項目をクリックできず、onItemClick メソッドもトリガーできず、onItemLongClick メソッドもトリガーできません。 これは ListView の注目すべき問題です。これは、ListView のフォーカスが他のコントロールによって奪われることを意味します。その様子を見てみましょう。 この問題を解決します?


方法 1: この問題のコントロールをプリエンプトしたコンポーネントに android:focusable="false" を設定します。 または、コードでコントロールを取得した後に呼び出します:

setFocusable(false)
!! さらに、android:focusable="false" を設定すると、この B は突然フォーカスを取得できます。 再びフォーカスが失われ、小さなキーボードが表示されなくなります。これは ListView のバグだと聞いたことがありますが、解決方法はまだわかりません。 解決策をご存知の場合は、お知らせください、ありがとうございます~

方法 2: アイテムのルート ノードを設定します android:descendantFocusability="blocksDescendants"

前述のように、上記の属性をアイテムのルート ノードに追加しますlayout、
android:descendantFocusability="blockDescendants"

、この属性には 3 つのオプションの値があります:

beforeDescendants: viewgroup はそのサブクラス コントロールを優先し、フォーカスを取得します

  • afterDescendants: viewgroup はサブクラス コントロールの場合のみは必要ありません フォーカスを取得した場合にのみフォーカスを取得します
  • ブロック子孫: ビューグループはサブクラス コントロールを上書きし、フォーカスを直接取得します
  • このセクションの概要:
さて、上記は ListView を解決する 2 つの方法ですフォーカスの問題、非常に簡単です。EditText について何かありましたら 焦点の問題に対する解決策は大歓迎です、ありがとうございます~