Проблема с событием OnClickListener держателя просмотра

Я создаю адаптер списка с держателем вида:

final ViewHolder holder;
if (convertView == null) {
     convertView = layoutInflater.inflate(R.layout.activity_list_layout, null);
     holder = new ViewHolder();
     //Layout Code here
     convertView.setTag(holder);
}
else {
     holder = (ViewHolder) convertView.getTag();
}

настройка прослушивателя Onclick:

 holder.view.setOnClickListener(titleListener);
 final OnClickListener titleListener = new OnClickListener() {
         @Override
         public void onClick(View v) {
          holder.view.setBackgroundResource(R.drawable.top_bar);
          notifyDataSetChanged();

          }
     };

Внутри списка Onclick я меняю фоновое изображение выбранного представления. Но здесь, с выбранным элементом, для других элементов в том же списке меняется фоновое изображение. Пожалуйста, предложите мне, какие изменения мне нужно сделать, чтобы изменить BG только для выбранного элемента.

Обновленный код для getview:

final ViewHolder holder;        

if (convertView == null) {
            convertView = layoutInflater.inflate(
                    R.layout.activity_news_list_layout, null);
            holder = new ViewHolder();
            holder.title = (TextView) convertView.findViewById(R.id.title);
            holder.image = (ImageView) convertView
                    .findViewById(R.id.thumbImage);
            holder.view = (RelativeLayout) convertView.findViewById(R.id.tView);
            holder.opacityView = (View) convertView
                    .findViewById(R.id.opacity_view);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

holder.view.setOnClickListener(titleListener);
 final OnClickListener titleListener = new OnClickListener() {
         @Override
         public void onClick(View v) {
          holder.view.setBackgroundResource(R.drawable.top_bar);
          notifyDataSetChanged();

          }
     };

 holder.view.setOnClickListener(titleListener);
        return convertView;

Пожалуйста, проверьте изображение, я выбрал строку «Это сообщество Дубая», но фон также изменился для «Я был уверен». Есть и другие строки, которые были выбраны в событии щелчка.

Изображение


person Timson    schedule 11.03.2014    source источник


Ответы (4)


Попробуй это

holder.view.setOnClickListener(titleListener);
final OnClickListener titleListener = new OnClickListener() {
     @Override
     public void onClick(View v) {
      Drawable drawable = res.getDrawable(R.drawable.newImage); //new Image 
      holder.view..setBackgroundDrawable(drawable);
      notifyDataSetChanged();

      }
 };
person Sri    schedule 11.03.2014

Relativelayout rlayout=holder.view;

пожалуйста, добавьте строку выше...

holder.view.setOnClickListener(titleListener);
 final OnClickListener titleListener = new OnClickListener() {
         @Override
         public void onClick(View v) {
          rlayout.setBackgroundResource(R.drawable.top_bar);
          notifyDataSetChanged();

          }
     };
person dipali    schedule 11.03.2014

Используйте селектор, чтобы выбрать любую строку по щелчку:

list_selector.xml:

<?xml version="1.0" encoding="utf-8"?>

<item android:drawable="@color/android:on_press" android:state_enabled="true" android:state_pressed="true"/>
<item android:drawable="@color/android:activated_drawble" android:state_activated="true" android:state_focused="true"/>
<item android:drawable="@color/android:normal_drawble"/>

Создайте этот xml и примените в фоновом режиме строки списка.

Затем примените setActivated(true) к этому виду держателя при нажатии. Вот и все. Это правильный способ реализации селектора.

person Yashdeep Patel    schedule 11.03.2014

в пользовательском адаптере OnBinviewHolder. Попробуй это.

введите здесь описание изображения

person Mirza Adil    schedule 14.09.2018