0

listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);私は ListView を持っていて、項目が選択/押されたときだけでなく、このコードによって選択/押されたままになっているときだけでなく、カスタム画像に設定されているときにデフォルトの青いハイライトを変更したかったのです:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    // TODO Auto-generated method stub
    v.setBackgroundResource(0);
    view.setBackgroundDrawable(getResources().getDrawable(
            R.drawable.list_item_highlight_short));
    v = view;
}

問題は、ListView に 20 個のアイテムがある場合、ビュー内にない一部のアイテムがまだ強調表示され、含まれていないことです。v.setBackgroundResource(0);

ListView 内のすべてのアイテムの BackgroundResource を削除して、クリックしたアイテムにカスタム イメージの背景を設定して、「選択済み」状態を示すにはどうすればよいですか?

4

3 に答える 3

2

getViewアダプターのメソッドをオーバーライドしてみてください。そして、その方法でこの作業を行います。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    if (v == null) {
        LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.Your_listview_layout, null);
    }

    if (listview.isItemChecked(position)) {                          
        v.setBackgroundResource(R.drawable.list_item_highlight_short);                                      
    } else {
        v.setBackgroundResource(0);                     
    }
    return super.getView(position, v, parent);
}
于 2013-07-25T04:52:49.607 に答える
1

リストビューのListSelecterプロパティを使用してみてください

例えば:

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:listSelector="#0000ff" >

    </ListView>
于 2013-07-25T04:52:26.583 に答える
0

クリックしたアイテムの位置をアダプターに保存します。上記の関数 adapter.setPosition(position) のように。次に、アダプターの getView 関数で、位置が選択されているかどうかを確認し、それに応じて背景を変更します

于 2013-07-25T04:36:19.323 に答える