2014-01-21 6 views
5

Можете ли вы мне помочь. Мне нужно изменить цвет фона моего элемента списка списка, который выбирается вручную setSelection (int pos) функция, и мне нужно остановиться с новым цветом до нового вызова setSelection. Я прочитал несколько тем, как это сделать, но у меня все еще нет успехов. Благодаря!Android ListView. Как изменить цвет фона вручную выбранного объекта

+0

Попытка использовать 'listSelector' как [здесь] (http://stackoverflow.com/q/2183447/1051783) – gunar

+0

Проверить этот ответ: http://stackoverflow.com/questions/19953285/android -listview-item-background-change – Hulk

+0

Ваш товар выбран одним кликом? Если это вы можете использовать onItemClick из вашего спискаView –

ответ

8

мне удалось добиться этого, сделав несколько селекторов для различных состояний

первого это в вашем ListView

android:listSelector="@drawable/list_selector" 

Затем создать XML-файлы в Drawable для управления Diferent состояния

@ drawable/list_selector

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:drawable="@drawable/list_item_bg_normal" android:state_activated="false"/> 
<item android:drawable="@drawable/list_item_bg_pressed" android:state_pressed="true"/> 
<item android:drawable="@drawable/list_item_bg_pressed" android:state_activated="true"/> 
</selector> 

@ вытяжке/list_item_bg_normal

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"> 
<gradient 
    android:startColor="@color/list_background" 
    android:endColor="@color/list_background" 
    android:angle="90" /> 
</shape> 

@ вытяжке/list_item_bg_pressed

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient 
     android:startColor="@color/list_background_pressed" 
     android:endColor="@color/list_background_pressed" 
     android:angle="90" /> 
</shape> 

в вашем выборе ListView

listView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position,long arg3) { 
      view.setSelected(true); 
      ... 
     } 
    } 

Не забудьте добавить list_background_pressed и list_background к вашим значениям/color.xml или просто установите цвет вручную в каждом файле.

И я верю, что когда вы используете setSelection (int pos), который автоматически установит макет, который вы установили как выбранный.

Надеюсь, это поможет.

+0

Спасибо! Я сделал так, как вы сказали, но все еще не имеет успеха (( –

+0

Я отредактировал свой код с помощью метода setOnItemClickListener, дайте ему чек. –

+0

Спасибо, я попробую! Исправьте меня, если я ошибаюсь: функция setSelection автоматически вызывает onItemClick метод моего списка? –

0
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     if (updateview != null) updateview.setBackgroundColor(Color.TRANSPARENT); 
     updateview = view; 
     view.setBackgroundColor(Color.CYAN); 
    } 
}); 
+0

Что такое updateview? – xRobot

Смежные вопросы