2015-05-27 6 views
0

Я пытаюсь изменить фон элемента списка, когда он нажат, и, несмотря на то, что он пробовал то, что упоминалось в других сообщениях SO, элемент не хочет менять фон при нажатии.ListView элемент, не меняющийся фон

Что я делаю неправильно?


EDIT: То, что я хочу добиться:

enter image description here

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

У меня есть этот простой селектор:

selector.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/selected_state" /> 
</selector> 

selected_state.xml

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

Я попытался установить его на селектор список и делая вид списка одиночный выбор

Компонов:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="100dp"> 
... 
       <LinearLayout 
        android:id="@+id/tab1" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:orientation="vertical"> 

        <ListView 
          android:layout_width="wrap_content" 
          android:layout_height="fill_parent" 
          android:id="@+id/listViewCentral" 
          android:choiceMode="singleChoice" 
          android:listSelector="@drawable/selector" /> 
       </LinearLayout> 
... 

</RelativeLayout> 

Просмотр списка пункт:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="100dp" 
    android:background="@drawable/selector"> 

... 

</RelativeLayout> 

И я использовал OnItemClick слушателя, чтобы установить состояние в избранное

Основная деятельность:

ListView list = (ListView)findViewById(R.id.listViewCentral); 
     list.setAdapter(stringAdapter); 
     list.setOnItemClickListener(new TsClickListener()); 

СЛУШАТЕЛЬ:

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

Logcat пуст (без ошибок)

ответ

0

Проблема была в том, что событие OnItemClick вообще не запускалось, и решение заключалось в том, чтобы добавить атрибут 'clickable' к элементу RelativeLayout моего макета элемента списка списка и установить его в true, все работает отлично, тогда ,

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="100dp" 
    android:clickable="true" <-- Problem 
    android:background="@drawable/selector"> 

... 

</RelativeLayout> 
0

попробовать добавить свойство android:state_focused

<?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/selected_state" />    
    <item android:state_focused="true" android:drawable="@drawable/selected_state" /> 
</selector> 
Смежные вопросы