【问题标题】:View holder OnClickListener event issue查看持有者 OnClickListener 事件问题
【发布时间】:2014-03-11 06:29:43
【问题描述】:

我正在创建一个带有视图支架的列表视图适配器:

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;

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

【问题讨论】:

  • 请在getView()中显示所有代码
  • 我觉得你的问题类似于this...
  • 你能不能试着设置这样的背景v.setBackgroundResource(R.drawable.top_bar); 即使你必须编写更多代码来管理视图。
  • @GopalRao 试过但结果相同 :(
  • 为什么要在适配器内设置onClickListener?如果适配器应用于ListView,您不应该处理ListViewsetOnItemClickListener 中的事件吗?

标签: android listview android-listview android-adapter


【解决方案1】:

试试这个

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

      }
 };

【讨论】:

    【解决方案2】:
    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();
    
              }
         };
    

    【讨论】:

      【解决方案3】:

      使用选择器在点击时选择任意行:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2012-01-16
          • 1970-01-01
          • 2014-02-21
          • 2022-01-14
          • 1970-01-01
          • 2020-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多