Android : Выделите элемент выбран в ListView

? Velja @ | Original: StackOverFlow
---

Я делал заявление, что работает с ListViews в Android, и я не могу сделать так, чтовыбран ( chacked ) деталь имеет иное происхождение . Я использую CHOICE_MODE_SINGLE . Это как мой код выглядит до сих пор:

ListView, который я использую : (внутри layout.xml )

<ListView
    android:id="@+id/listView"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:choiceMode="singleChoice"
    android:listSelector="@drawable/selector_test" >
</ListView>

Расположение TextView я использую адаптер : ( listItem.xml )

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/listItem"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="23sp"
    android:textStyle="bold" />

Это где я добавить адаптер :

mListAdapter = new ArrayAdapter<String>(this, R.layout.listItem, mList);
mListView = (ListView) findViewById(R.id.listView);
mListView.setAdapter(mAuthorAdapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
        String selected = mList.get(position);
        // ...
        mListView.setItemChecked(position, true);
    }
});

Я уверен, чтонужная опция проверяется по щелчку, потому что когда я называю getCheckedItemPosition (), она возвращает правильное значение .

И теперь, эти две вещи я попытался с тем чтобы подчеркнуть проверенную пункт :

Выбор холст : ( selector_test.xml )

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="@android:integer/config_longAnimTime">

    <item android:state_checked="true"><shape>
            <solid android:color="@color/red" />
        </shape></item>
    <item android:state_selected="true"><shape>
            <solid android:color="@color/blue" />
        </shape></item>
    <item android:state_pressed="true"><shape>
            <solid android:color="@color/green" />
        </shape></item>

</selector>

Я добавляю его в .xml с :

android:listSelector="@drawable/selector_test"

Фон холст : ( background_test.xml )

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/red" android:state_checked="true"/>
    <item android:drawable="@color/blue" android:state_selected="true"/>
    <item android:drawable="@color/green"/>

</selector>

Я добавляю его в .xml с :

android:background="@drawable/background_test"

Я попробовал, добавив переключатель, а фон как listView.xml и listItem.xml, ноединственное, что меняется, так это цветфона по умолчанию, ицвет селектора, когдапункт нажатии (или должность) . Android : state_checked = " истинный " и Android : state_selected = " истинный ", кажется, ничего не делать . Я могу изменить фон путем переопределения метода GetView () в ArrayAdapter и вызова setBackgroundColor () в ней, если выбранвид, и это делает изменить фон, но и избавляется от селектора полностью . Кроме того, я не очень хотел, чтобы переопределить классы просто изменить одну строку кода, особенно если это одно и то же может быть достигнуто иначе . Так что я прошу, есть лиспособ выделить отмеченный элемент в ListView, добавив селектор или фона рисуем на него, и я просто делаю это неправильно, или мне придется заставить его работать по-другому. Спасибо заранее! :)

---

Top 5 ответ

1Ravinder Bhandari @

добавьте эту строку в OnStart вашей деятельности

lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

где ЛЖ экземпляр ListView

затем переопределить этот метод и добавьте следующие строки к нему.

 @Override
public void onListItemClick(ListView l, View v, int position, long id) {


    // Set the item as checked to be highlighted 
    lv.setItemChecked(position, true);
            v.setBackgroundColor(Color.BLUE);

        conversationAdapter.notifyDataSetChanged();

}

а затем изменить цвет фона предыдущего выбранного элемента в норму метода GetView настраиваемого адаптера

2Jack Duong @

Try this:

listViewDay.setItemChecked(position, true);
listViewDay.setSelection(position);

listitem.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="40dp"
    android:background="@drawable/list_day_selector" >

    <TextView
        android:id="@+id/txtItemDay"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center_vertical|center_horizontal"
        android:text="22"
        android:textColor="@android:color/white"
        android:textSize="22sp" />

</LinearLayout>

list_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<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/bg_with_left_arrow" android:state_pressed="true"/>
    <item android:drawable="@drawable/bg_with_left_arrow" android:state_activated="true"/>

</selector>
3Rafael Ruiz Tabares @

Я думаю, что вы не можите использовать mListView внутри анонимного класса . Вы должны использовать AdapterView arg0

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View view,
                int position, long id) {
            AnyObject obj=(AnyObject)arg0.getItemAtPosition(position);

                            ........
                            .........
                            .........

        }
    });