2012-04-11 4 views
3

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

Я хочу, чтобы этот эффект, как на изображении, чтобы быть SelectedItem

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" 
      android:drawable="@drawable/selected_item"/> 
    <item android:drawable="@android:color/transparent" /> 
</selector> 

И это текст list_row

<!-- this layout is used to view row of category list and resturant list --> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/txt_category_row" 
    android:gravity="center" 
    android:layout_width="match_parent" 
    android:textColor="@color/BLACK" 
    android:layout_height="55dp" 
    android:padding="10dp" 
    android:text="@string/hello" 
    android:layout_marginTop="5dp" 

    android:textAppearance="?android:attr/textAppearanceLarge" /> 

И этого ListView code.xml:

<ListView android:id="@+id/list_category" 
    android:layout_alignParentLeft="true" 
    android:layout_height="fill_parent" 
    android:layout_width="184dp" 
    android:dividerHeight="2px" 
    android:background="@android:color/transparent" 
    android:cacheColorHint="@android:color/transparent" 
    android:layout_marginTop="5dp" 
    android:listSelector="@drawable/list_selector" 
    android:divider="@color/Gray" > 

ответ

-2
dynamicListView.setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     //arg1 will give you that view 
     arg1.setBackgroundColor(Color.BLUE); 
    } 
}); 
+0

это работает, но когда я выбрать другой пункт повестку дня, brevious вид проживание выбрано ..can U помочь – Basant

10

В режиме касания нет выбранного или сфокусированного состояния.

Однако вы можете иметь проверенное состояние (даже без флажка) и использовать его для изменения свойств при выборе. В вашем Java коде, где вы установили для отображения списка добавьте эту строку после определения ListView:

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

Затем в государственном списке XML изменить это:

android:state_selected="true" 

к этому:

android:state_activated="true" 

Итак, теперь вы должны иметь:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_activated="true" 
     android:drawable="@drawable/selected_item"/> 
    <item android:drawable="@android:color/transparent" /> 
</selector> 

И, наконец, установить фон для вашего зрения строки, чтобы указать на файл селектора:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/txt_category_row" 
    android:gravity="center" 
    android:layout_width="match_parent" 
    android:textColor="@color/BLACK" 
    android:layout_height="55dp" 
    android:padding="10dp" 
    android:text="@string/hello" 
    android:layout_marginTop="5dp" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:background="@drawable/item_selector" /> 

Вы не дали имя для государственного списка XML, так что я просто использовал «item_selector». Вы должны заменить это на любое имя этого файла.

+0

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

+0

Итак, вы хотите несколько единиц, поэтому оно должно быть CHOICE_MODE_MULTIPLE (я думаю, что это правильно, меня нет дома для проверки дважды. – Barak

+0

нет, вы меня не понимаете, я имею в виду, что когда я выбираю элемент, его цвет фона и текста изменяется, пока я не выберу другой элемент. Новый выбранный элемент будет влиять на цвет фона и текста и старый предмет стать нормальным. У меня теперь, когда выбранный элемент появляется, когда я его выбираю и уйду, когда я удаляю палец. Помогите мне решить эту проблему .. спасибо – Basant

1

Вы должны использовать CheckableFrameLayout в виде списка элементов. Вы можете найти его здесь - CheckableFrameLayout

Вы можете видеть, что при нажатии на элемент списка он меняет фон на все, что вы хотите.