リストアイテムの状態(押された状態または選択された状態)を示す背景として使用される2つのドローアブルがあります。Pressedドローアブルはセレクターですが、状態は指定されていません。これは、XMLを介してリストのandroid:listSelectorになるように接続されています。
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/my_actual_drawable" />
</selector>
ただし、Selectedドローアブルは複雑であり、アイテムが選択されたときに複数の単純な背景ドローアブルの変更が必要になるため、コードによって適用されます。
2つのリストアイテム間をすばやくクリックすると、1つのアイテムには[選択済み]ハイライトが表示され(保持され)、別のアイテムには[押された]ハイライトが表示されます(保持されます)。これは、プレスが非常に迅速に行われるため、基になるフレームワークによってクリックとして解釈されないためonItemClick
、リストに到達しないためだと思います。
1つの解決策は、状態でセレクターを使用することです(これがセレクターの目的です!):
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/my_actual_drawable" />
</selector>
ただし、これには、コードが選択されたハイライトを適用する前にPressedハイライトをオフにするという不幸な効果があります。そのため、onItemClick
ハンドラーの早い段階でsetBackgroundResource
呼び出しを行っても、2つの状態の間にハイライトが点滅します。
もう1つの解決策はonItemClick
、イベントだけでなくイベントも監視onTouch
し、すべてをコードで処理することです。それは物事を遅くしすぎるように見えます。
フラッシュ状態と二重選択状態の両方を回避するにはどうすればよいですか?