Android:使用onClick在ListView行中更改按钮背景

Android:使用onClick在ListView行中更改按钮背景,第1张

概述我的行包含一个按钮,该按钮在我的适配器的getView中设置了自己的单击侦听器.我可以使用行的父级中的 android:descendantFocusability =“blocksDescendants”区分我的按钮点击和实际的行项目点击. 当我点击一个按钮时,它正确地设置了按钮背景,我的问题是当我滚动列表时,它也为不同的行设置它.我认为他们的问题在哪里回收. 这是我的代码: @Override 我的行包含一个按钮,该按钮在我的适配器的getVIEw中设置了自己的单击侦听器.我可以使用行的父级中的 android:descendantFocusability =“blocksDescendants”区分我的按钮点击和实际的行项目点击.

当我点击一个按钮时,它正确地设置了按钮背景,我的问题是当我滚动列表时,它也为不同的行设置它.我认为他们的问题在哪里回收.

这是我的代码:

@OverrIDepublic VIEw getVIEw(int position,VIEw convertVIEw,VIEwGroup parent){    if(convertVIEw == null){        holder = new VIEwHolder();        convertVIEw = inflater.inflate(R.layout.todays_sales_favorite_row,null);        holder.favCatBtn = (button)convertVIEw.findVIEwByID(R.ID.favCatBtn);                    convertVIEw.setTag(holder);    } else {        holder = (VIEwHolder)convertVIEw.getTag();    }        holder.favCatBtn.setTag(position);        holder.favCatBtn.setonClickListener(this);    return convertVIEw; }@OverrIDepublic voID onClick(VIEw v) {    int pos = (Integer) v.getTag();    Log.d(TAG,"button row pos click: " + pos);    relativeLayout rl = (relativeLayout)v.getParent();    holder.favCatBtn = (button)rl.getChildAt(0);    holder.favCatBtn.setBackgroundResource(R.drawable.icon_yellow_star_large);}

因此,如果我点击行位置1处的按钮,按钮背景会发生变化.但是当我随机向下滚动列表时,其他按钮也会被设置.然后有时当我向后滚动到位置1时,按钮背景将再次恢复为原始状态.

我在这里想念的是什么?我知道我就在那里它只是一些我不做的小事.

解决方法 是的,你是对的,意见被回收.您需要跟踪已单击的位置并更新getVIEw方法中的后台资源.例如,我扩展了您的代码以添加背景切换:
private final boolean[] mHighlightedpositions = new boolean[NUM_OF_ITEMS];@OverrIDepublic VIEw getVIEw(int position,VIEwGroup parent){    if(convertVIEw == null){        holder = new VIEwHolder();        convertVIEw = inflater.inflate(R.layout.todays_sales_favorite_row,null);        holder.favCatBtn = (button)convertVIEw.findVIEwByID(R.ID.favCatBtn);        holder.favCatBtn.setonClickListener(this);        convertVIEw.setTag(holder);    }else {        holder = (VIEwHolder)convertVIEw.getTag();    }    holder.favCatBtn.setTag(position);    if(mHighlightedpositions[position]) {        holder.favCatBtn.setBackgroundResource(R.drawable.icon_yellow_star_large);    }else {        holder.favCatBtn.setBackgroundResource(0);    }    return convertVIEw;}@OverrIDepublic voID onClick(VIEw vIEw) {    int position = (Integer)vIEw.getTag();    Log.d(TAG,"button row pos click: " + position);    // Toggle background resource    relativeLayout layout = (relativeLayout)vIEw.getParent();    button button = (button)layout.getChildAt(0);    if(mHighlightedpositions[position]) {        button.setBackgroundResource(0);        mHighlightedpositions[position] = false;    }else {        button.setBackgroundResource(R.drawable.icon_yellow_star_large);        mHighlightedpositions[position] = true;    }}
总结

以上是内存溢出为你收集整理的Android:使用onClick在ListView行中更改按钮背景全部内容,希望文章能够帮你解决Android:使用onClick在ListView行中更改按钮背景所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1136024.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存