2017-01-30 1 views
1

Мне нужно изменить цвет фона для выбранных элементов. Приведенный ниже код меняет цвет фона (синий) только при повторном щелчке элемента. Поэтому, когда я нажимаю элемент в первый раз, он не работает.ListView: Почему первый раз не меняется фон?

final SongAdapter songAdt = new SongAdapter(getApplicationContext(), songList); 
lv.setAdapter(songAdt); 

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Log.i(TAG, " executed"); 
      view.setBackgroundColor(Color.BLUE); 
     } 
    } 
); 

Я только что проверил (с помощью функции Log.i), что код выполняется в 2 раза, но только второй раз, фон меняется. Зачем ?

+0

Можете ли вы разработать вопрос, предоставляя весь код к списку? – OBX

+0

Скорее всего, вид не перерисовывается. Наличие полного исходного кода поможет понять, почему это происходит. – jackgu1988

+0

Я добавил код в вышеупомянутом вопросе, какая часть вам нужна именно? Спасибо :) – xRobot

ответ

0

В списке, у нас есть свойство android: listSelector = "@ color/sky" использовать это в xml.This изменит выбранный элемент background.Hope это работает для вас.

+0

Я пробовал его, как вы можете видеть здесь: http://stackoverflow.com/questions/41936272/how-to-highlight-pressed-items-in-a-listview Но это не работает, и я не знаю, почему. – xRobot

+0

android: choiceMode = "singleChoice" попробуйте это в вашем списке view @xRobot –

+0

сделано, но оно не работает – xRobot

0

Удалить Линию

view.setBackgroundColor(Color.BLUE); 

и добавьте эту строку и посмотреть, если работает

parent.getChildAt(position).setBackgroundColor(getResources().getColor(R.color.list_blue_colour)); 

я не проверял еще, пожалуйста, поделитесь, если работать, если не работает, то выполните этот ответ over here

+0

это говорит о том, что getColor устарел – xRobot

+0

попробуйте использовать 'setBackgroundColor (Color.BLUE); вместо этого и посмотрите – Redman

+0

В этом случае он выделяет неправильные позиции – xRobot

1

попробуйте следующее:

private int prevPosition=-1; 

и ваш onItemClick использование:

lv.setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> adapter, View view, 
      int position, long arg3) { 

     for (int i = 0; i < adapter.getChildCount(); i++) { 
      if (i == position) { 

       if(position!=prevPosition){ 
        //set your selected color      
        adapter.getChildAt(i).setBackgroundColor(Color.BLUE); 
        prevPosition=position; 

       }else{ 
        adapter.getChildAt(i).setBackgroundColor(Color.BLACK); 
        prevPosition=-1; 
        } 

       }else{ 
        //set your normal color 
        adapter.getChildAt(i).setBackgroundColor(Color.BLACK); 

       } 

      } 
    } 

}); 

Вариант 2

вы можете использовать Drawable селектор для listview

в res/drawable папке

background.xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" 
    android:drawable="@drawable/pressed" /> 
<item android:state_focused="false" 
    android:drawable="@drawable/normal" /> 
</selector> 

pressed.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
<solid android:color="#000000"/> // set your selected color 
<padding android:left="5dp" 
     android:top="5dp" 
     android:right="5dp" 
     android:bottom="5dp"/> 
</shape> 

normal.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
<solid android:color="#FFFFFF"/>  

<padding android:left="5dp" 
     android:top="5dp" 
     android:right="5dp" 
     android:bottom="5dp"/> 
</shape> 

Теперь использовать его в listview в XML:

android:listSelector="@drawable/background" 
+0

Это может быть неэффективно для музыкального проигрывателя. Это замедлит работу в списках больших песен. – jackgu1988

+0

редактирование выглядит прекрасно, и что-то подобное сработало для меня в прошлом. Однако я не уверен, что это сработает, поскольку ОП сказал, что это не сработало: http://stackoverflow.com/questions/41936272/how-to-highlight-pressed-items-in-a-listview – jackgu1988

+1

it работает .. для меня .... попробуйте и удалите ваш 'view.setBackgroundColor (Color.BLUE);' 'view.setSelected (true);' in onItemClick – rafsanahmad007