2017-01-30 8 views
0

Я использую этот код, но он просто ничего не делает:Как изменить цвет фона выбранного элемента?

Добавлены в мой ListView:

android:listSelector="@drawable/list_selector" 

Затем XML файлы в Drawable, чтобы контролировать Diferent штатов

@ вытяжку/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_norma л

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"> 
<gradient 
    android:startColor="#ff0000" 
    android:endColor="#ffffff" 
    android:angle="90" /> 
</shape> 

@ вытяжке/list_item_bg_pressed

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient 
     android:startColor="#ff0000" 
     android:endColor="#ffffff" 
     android:angle="90" /> 
</shape> 

В деятельности:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

     view.setSelected(true); 
+1

Я думаю, что вы можете использовать это также http://stackoverflow.com/ a/16190228/4427519 –

+0

означает, что вы хотите выделить цвет в выбранный элемент списка ...? –

+0

@SagarAghara да – xRobot

ответ

0

Добавить

adapter.notifydatasetchanged(); 


Ваш код выглядит следующим образом

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      view.setSelected(true); 
      adapter.notifydatasetchanged(); 
+0

Не удается разрешить символ «адаптер». – xRobot

+0

адаптер - это имя переменной адаптера. Используете ли вы BaseAdapter –

+0

. Пример «ListAdapter mAdapter = new GroupAdapter (групповые значения, mrecycler view); 'mrecyclerview.setAdapter (mAdapter);' в этом 'mAdapter' есть имя адаптера –

0

Пожалуйста, обновите ваш файл выбора, как показано ниже и вызвать уведомит набор данных изменен. И внутри адаптера вам необходимо поддерживать флаг для сохранения выбора при прокрутке списка.

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

     <item android:drawable="@drawable/list_item_bg_pressed" android:state_pressed="true"/> 
     <item android:drawable="@drawable/list_item_bg_pressed" android:state_selected="true"/> 
     <item android:drawable="@drawable/list_item_bg_normal"/> 
    </selector> 

Тогда

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       view.setSelected(true); 
       list.get(position).isSelected=true; // list is array items passed to adapter 
       adapter.notifydatasetchanged(); 
      ) 
    } 

В методе GetView адаптером поддерживать выбор, используя логическое значение, как

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
    if(list.get(position).isSelected){ 
     convertview.setSelected(true) 
    }else{ 
     convertview.setSelected(false) 
    } 
} 
+0

Я получаю это: не удается разрешить символ «isSelected», не удается разрешить символ «адаптер», адаптер – xRobot

+0

- ссылка на ваш адаптер, а «isSelected» - логическая переменная, которую нужно объявить в вашем классе модели. – vijaypalod

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