查看持有者OnClickListener事件问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查看持有者OnClickListener事件问题相关的知识,希望对你有一定的参考价值。

我正在创建一个带有视图持有者的listview适配器:

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 Listener:

 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;

请检查图像,我选择了“这个迪拜社区”一行,但背景也改为“我很自信”。在click事件中也选择了其他一些行

答案

试试这个

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

      }
 };
另一答案
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();

          }
     };
另一答案

使用选择器选择点击的任何行:

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)应用于该持有者视图。这就对了。这是实现选择器的正确方法。

另一答案

在自定义适配器OnBinviewHolder中。试试吧。

enter image description here

以上是关于查看持有者OnClickListener事件问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在自定义操作栏上获取 onClickListener() 事件

回收站查看 OnClickListener

Android ListView OnItemClickListener 对比。查看 OnClickListener

三种方式实现按钮的点击事件

Android 通过实现View.OnClickListener接口来实现对点击事件的相应所出现的憨批问题

。。。事件注册方法之四。。。