Intereting Posts
InputConnection.finishComposingText () NullPointerException Как я могу масштабировать текстовые изображения, используя общие переходы элементов? Ошибка в создании библиотеки ndk Android: рекомендуемое значение bufferSizeInBytes в AudioRecord Непредвиденный код ответа. Android.support.v7.internal.widget.ActionBarOverlayLayout не может быть создан Веб-браузер Progressbar, такой как браузер Chrome Значение атрибута формата "android: drawable" недействительно Как правильно просмотреть фрагмент RemoteViews для обновления виджета превышает максимальную ошибку использования битовой памяти Фоновые процессы случайным образом умирают, когда приложение работает на Samsung S3 Кнопка jqm navbar нажата, нажав программную клавиатуру Android «Next», если поле формы находится под навигационной панелью Пустое пространство java Xiaomi не получает уведомления, когда приложение не работает Android закрывает и открывает базу данных SQLite на уровне приложений

SetOnItemClickListener в ListView, влияющий на несколько строк

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

Все хорошо, но при нажатии строки другие строки имеют цвет фона, установленный на черный, и при прокрутке вверх и вниз все испортится.

GetView () в пользовательском адаптере

public View getView(final int position, View convertView, ViewGroup parent) { final ListItem holder; View vi=convertView; if(vi==null){ vi = inflater.inflate(R.layout.list, null); holder = new ListItem(); holder.nametext= (TextView) vi.findViewById(R.id.name); vi.setTag(holder); }else{ holder = (ListItem) vi.getTag(); } holder.nametext.setText(""+item.name); return vi; } 

В mainactivity:

 CustomAdapter listadapter = new CustomAdapter(context, R.layout.list, items); list.setAdapter(listadapter); list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapter, View view, int position, long arg){ TextView v = (TextView) view.findViewById(R.id.name); view.setBackgroundColor(Color.BLACK); v.setTextColor(Color.WHITE); } }); 

Я попробовал puttin setOnItemClickListener в getView (), но не повезло …

Любая помощь? Благодарю.

Пользовательские списки видят «создать» представление только для показа строк, когда прокрутка вниз следующей строки будет затронута, как первая.

Чтобы предотвратить эту проблему, вам нужно создать логическое поле в ListItem Clicked;

Затем, щелкнув представление, item.Clicked устанавливается в true, где в getView ()

 final ListItem item = items.get(position); 

а также

 List<ListItem> items; 

Как переменная вашего адаптера

Реализация:

Вам нужно установить setOnClickListener в getView (), как показано ниже

 vi.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg1) { if(previousView!=null){ ListItem previousItem = items.get(previousPosition); previousItem.Clicked = false; } item.Clicked = true; previousView = arg1; previousPosition = position; notifyDataSetChanged(); } }); if(!item.isClicked){ holder.nametext.setTextColor(Color.BLACK); vi.setBackgroundColor(Color.WHITE); }else{ holder.nametext.setTextColor(Color.WHITE); vi.setBackgroundColor(Color.BLACK); } }); 

Это эффект по умолчанию, связанный с отображением списка кеша, который можно избежать, установив свойство «android: cacheColorHint» на @null, как это

 <ListView android:id="@+id/lstEventComment" android:layout_width="match_parent" android:layout_height="wrap_content" android:cacheColorHint="@null" />