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 のバグだと聞いたことがありますが、解決方法はまだわかりません。 解決策をご存知の場合は、お知らせください、ありがとうございます~前述のように、上記の属性をアイテムのルート ノードに追加しますlayout、方法 2: アイテムのルート ノードを設定します android:descendantFocusability="blocksDescendants"
android:descendantFocusability="blockDescendants"
、この属性には 3 つのオプションの値があります:
さて、上記は ListView を解決する 2 つの方法ですフォーカスの問題、非常に簡単です。EditText について何かありましたら 焦点の問題に対する解決策は大歓迎です、ありがとうございます~beforeDescendants: viewgroup はそのサブクラス コントロールを優先し、フォーカスを取得します
- afterDescendants: viewgroup はサブクラス コントロールの場合のみは必要ありません フォーカスを取得した場合にのみフォーカスを取得します
- ブロック子孫: ビューグループはサブクラス コントロールを上書きし、フォーカスを直接取得します
- このセクションの概要: