0

リストアイテムの状態(押された状態または選択された状態)を示す背景として使用される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し、すべてをコードで処理することです。それは物事を遅くしすぎるように見えます。

フラッシュ状態と二重選択状態の両方を回避するにはどうすればよいですか?

4

1 に答える 1

1

背景のドローアブルを単に変更するだけでなく、状況がより複雑であるとあなたが言っているところがわかります。単純化しすぎて申し訳ありません。

xml セレクターにできることはすべて処理させてみませんか? 表示されているフラッシュと二重選択を回避するために、バックグラウンド リソースを変更するために、押された状態と選択された状態の両方を処理するようにセレクター xml をセットアップできるはずです。バックグラウンドが奇妙なことをしていなければ、Java で行っている他の処理は十分に高速であり、目立たないと思います。

は Android フレームワークの list_selector_backgroundと状態リストのドローアブル ドキュメントを、このようなことを行うための参照として使用するのが好きですが、list_selector_background はおそらくあなたのものよりも少し複雑です。

于 2010-09-10T01:39:30.177 に答える