Android ListView проблема выбора элемента - PullRequest
1 голос
/ 14 февраля 2012

У меня есть два ListView в XML, а именно: lvPrograms & lvEpisodes . Они размещены горизонтально.

Я заполняю эти ListViews из веб-службы.

Когда загружается действие, я вызываю веб-службу для получения данных для lvPrograms . Когда я получаю Программы , я загружаю Эпизоды для первой программы в найденном списке. и установите первый элемент lvPrograms как выбранный / выделенный, чтобы показать пользователю, что загруженные Эпизоды предназначены для этого элемента Программы. Я установил это следующим образом:

private void highlightSelectedProgram(int _previousSelectedProgramIndex, int _currentSelectedProgramIndex) {
    ListView allProgramsList = (ListView) findViewById(R.id.allProgramsList);

    //Get the last selected List Item
    View selectedChild = allProgramsList
            .getChildAt(_currentSelectedProgramIndex);

    //_previousSelectedProgramIndex & _currentSelectedProgramIndex are to keep track 
    //of currently/previously selected PROGRAM index


    if (selectedChild != null) {

        // get selected shape
        Drawable shape = getResources().getDrawable(
                R.drawable.selected_item_selector);

        //change selected item background to be highlighted
        selectedChild.setBackgroundDrawable(shape);

        //change previous item, if any (is not -1), to normal state
        if (_previousSelectedProgramIndex != ._currentSelectedProgramIndex && _previousSelectedProgramIndex != -1) {
            TextView previousChild = (TextView) allProgramsList
                    .getChildAt(_previousSelectedProgramIndex);

            previousChild.setBackgroundResource(R.drawable.item_selector);
        }
    }       
}

Я вызываю этот метод, когда пользователь нажимает на элемент списка PROGRAMS , чтобы выделить элемент, чьи EPISODES загружаются в lvEpisodes listview.

Похоже на следующее изображение.

enter image description here

Проблемы возникают только тогда, когда ListView имеет больше элементов, чем его видимая область. Поэтому, когда я щелкаю первый элемент, его фон изменяется с помощью приведенного выше кода, НО какой-то другой элемент, который находится среди невидимых элементов, также меняет фон. ПОЧЕМУ ??

Мне кажется, я что-то упустил ИЛИ обработка изначально невидимых элементов списка отличается.

ИЛИ Вы можете указать мне способ, которым я могу объявить фоновый селектор для того элемента, который ЩЕЛКНУТ ... и только выделенный элемент останется выделенным. Так что, если пользователь нажимает на какой-то другой элемент в списке, который находится среди скрытых элементов, этот элемент выделяется ... поэтому в любой момент в списке должен быть один выделенный элемент ... Это будет здорово, если это возможно.

любая помощь очень ценится, так как дата релиза близка. Спасибо

1 Ответ

2 голосов
/ 15 февраля 2012

используйте что-то вроде:

 lvPrograms.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
 lvPrograms.setSelector(R.drawable.programs_background);

Programs_background.xml

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