Проблема выбора ListView ... Использование onItemClick (AdapterView <?> Parent, View view, ...) - PullRequest
2 голосов
/ 01 апреля 2010

Проблема, которую я надеюсь решить, заключается в том, что при нажатии на один элемент в ListView фон этого элемента становится светло-серым, но когда я продолжаю прокручивать список, у каждого 4-го элемента фон меняется на светло-серый. хотя эти другие пункты не были нажаты. Как сделать так, чтобы клик вызывал только тот элемент, на который я нажал?

    ListView lv = (ListView) findViewById(R.id.resultsList);
    lv.setAdapter(new ArrayAdapter<String>(this, R.layout.resultitem, (String[])labelList.toArray(new String[labelList.size()])));

    lv.setOnItemClickListener(new OnItemClickListener() {    

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {      
            TextView tv = (TextView)view.findViewById(R.id.result);
            tv.setBackgroundColor(Color.LTGRAY);
            tv.setTextColor(Color.BLACK);
        }
     }

Ответы [ 2 ]

1 голос
/ 01 апреля 2010

Вам придется переопределить getView() в подклассе ListAdapter, в данном случае ArrayAdapter.

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

Если вы создаете подкласс ArrayAdapter, вы можете настроить свой onItemClickListener на какой-либо флаг, а затем на getView() вашего ArrayAdapter вы можете установить соответствующий цвет фона на основе этого флага.

Эта ссылка содержит пример подкласса ArrayAdapter

0 голосов
/ 24 апреля 2011

Полагаю, вы используете конвертированный вид, как этот

...public View getView(int position, View convertView, ViewGroup parent) { ....

и вы меняете его фон на 4-й позиции, и ваше представление позволяет сказать, что на одной странице 6 строк, поэтому каждая 4-я строка на каждой странице будет выделена серым цветом из-за повторного использования одного и того же convertView.

Я не знаю, правильно ли я объясняю, но если вы используете convertview и изменяете его макет, у вас должна быть логика для повторного создания этого макета, чтобы избежать повторного использования того же (кэшированного) представления.

...