View owner event question OnClickListener owner event

I am creating a listview adapter with a view holder:

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();
}

setting Onclick Listener:

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

          }
     };

Inside the Onclick list, I change the background image of the selected view. But here, with the item selected, for other items in the same list, the background image changes. Please tell me what changes I need to make in order to change BG only for the selected item.

Updated code to get:

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;

Please check the image, I selected the line β€œThis is a community in Dubai,” but the background has changed to β€œI was sure.” There are other rows that were selected in the click event.

Image

+4
source share
3

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();

      }
 };
+1
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();

          }
     };
+1

Use the selector to select any row when pressed:

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"/>

Create this xml and apply the list lines in the background.

Then apply setActivated (true) to the holder view when you click it. That's all. This is the right way to implement a selector.

+1
source

Source: https://habr.com/ru/post/1531108/


All Articles