当我点击一个按钮时,它正确地设置了按钮背景,我的问题是当我滚动列表时,它也为不同的行设置它.我认为他们的问题在哪里回收.
这是我的代码:
@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行中更改按钮背景所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)