私は次のように設定されているListViewを使用しています:
<ListView Android:id="@Android:id/list" Android:layout_width="fill_parent"
Android:layout_height="fill_parent" Android:longClickable="false"
Android:choiceMode="singleChoice">
</ListView>
私のコードでは、次のようにOnItemSelectedListenerをListViewに追加します。
getListView().setAdapter(adapter);
getListView().setOnItemSelectedListener(this);
私のアクティビティはそのようなリスナーを実装します:
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Log.d("Tag", "ListItemSelected: Parent: " + parent.toString() + " View: "
+ view.toString() + " Position: " + " Id: " + id);
}
リスト内の何かをクリックすると、このデバッグ出力が表示されることを期待していました。ただし、デバッグ出力はLogCatに表示されません。
OnItemSelectedListener
は、リストアイテムのクリックではなく、リストアイテムの選択をリッスンします。
この場合の選択は、デバイスのトラックパッドでこのアイテムにフォーカスを移動することと見なすことができます。
目的の動作を得るには、 OnItemClickListener
を使用する必要があります。
それは、タッチ対応デバイスで指を使ってテストしているからです。 タッチモード では、フォーカスも選択もありません。選択が必要なUIでは、ラジオボタンなどの異なるタイプのウィジェットを使用する必要があります。
最初に、ChoiceMode
を設定する必要があります。次に、ListViewで、setOnItemSelectedListener
がAdapterView
に登録されているため、選択したイベントを受け入れません。 、およびメソッドhandleDataChanged()
のコールバック、ただしクラスAbsListView
はこのメソッドをオーバーライドし、OnItemSelectedListener
をコールバックしない
setOnItemClickListener
のこのメソッドでseletedItemを取得できます
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.e("TAG", "onItemClick: " + position);
SparseBooleanArray positions = mListView.getCheckedItemPositions();
Log.e("TAG", "onItemSelected: " + positions.toString());
}
});