Как изменить выделение ListView синей подсветкой с помощью пользовательского изображения (не селектора)?

У меня есть ListView, и я хотел изменить синюю подсветку по умолчанию, когда он установлен на listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); для пользовательского изображения не только когда элемент выбран / нажат, но также остается выбранным / нажатым с помощью этого кода:

@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;
}

Проблема в том, что если у меня есть 20 элементов в моем ListView, некоторые элементы, которые не в пределах представления, будут выделены и не включены в v.setBackgroundResource(0);

Как я могу удалить BackgroundResource всех элементов в ListView, чтобы я мог установить выбранный элемент в качестве пользовательского фона изображения, чтобы указать состояние "выбрано"?

3 ответа

Попробуй переопределить 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);
}

Пожалуйста, попробуйте использовать свойство ListSelecter вашего списка

например:

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

    </ListView>

Сохраните позицию выбранного элемента в вашем адаптере. Как и в приведенной выше функции adapter.setPosition(position). Затем в функции getView адаптера проверьте, выбрана ли позиция, и измените фон соответственно.

Другие вопросы по тегам