2 loveztbdcz loveztbdcz 于 2013.11.29 14:54 提问

android开发中,想实现点击ImageButton切换它的图片。

开发时使用adapter把数据更新到listview。每一个Item都有一个按钮,onClicka时, v.findViewById(R.id.button).setBackgroundDrawable( getResources().getDrawable(R.drawable.picB)); 。
关于切换图片遇到几个问题,望各位大神指点一二。
1.布置XML时,设置android:src="@drawable/picA",这种做法点击没有进行图片切换。
2.布置XML时,不设定背景图片,设置adapter时,holder.botton.setBackgroundDrawable(getResources().getDrawable(R.drawable.picA));这种做法,点击图片切换了。但当讲手机画面往下拉直至这个这个切换的按钮看不见,再出现时,图片有变回了原来的图片。
3.布置XML时,不设定背景图片,设置adapter时,((ImageButton)v).setImageDrawable(getResources().getDrawable(R.drawable.picA));
这种做法,点击图片切换了。但当讲手机画面往下拉直至这个这个切换的按钮看不见,再出现时,变了图片的按钮不是我点击的那个按钮,数目也不对。按钮监听如下:
holder.copyBotton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

                v.findViewById(R.id.copybutton)
                        .setBackgroundColor(00000000);
                v.findViewById(R.id.copybutton).setBackgroundDrawable(
                        getResources().getDrawable(R.drawable.redheart));

            }
        }); 

3个回答

franzhong
franzhong   2013.11.29 15:30

1:xml中设置src只是设置载入时默认资源,并没扯到切换
2和3都是没加缓存造成的,adapter还有图片,你不加adapter后面会很卡,也会出现这些个别元素"时有时无"的异常情况
getView中样例代码:

ViewHolder holder;
        if(arg1==null){
            holder = new ViewHolder();
            arg1   = layoutinflater.inflate(R.layout.list_item_1, null);
            holder.name     = (TextView) arg1.findViewById(R.id.video_name1);
            holder.icon     = (ImageView) arg1.findViewById(R.id.video_image);
            arg1.setTag(holder);
        }else {
            holder = (ViewHolder) arg1.getTag();
        }

//ViewHolder

private class ViewHolder {
    TextView name;
    ImageView icon;
    }

附ImageButton在非ListView/GridView中使用说明
在xml中给ImageButton设置src属性android:src="@drawable/pl"
在myImageView.setOnClickListener中添加

myImageView.setImageDrawable(getResources().gerDrawable(R.drawable.pl2);

既可实现切换按纽,还有另一种方法:布局好按纽样式,方便以后多次调用

franzhong
franzhong 上getview代码
大约 4 年之前 回复
loveztbdcz
loveztbdcz getView中样例代码和我的一样。初学者的我,关于2和3的回答没太明白,怎么加缓存?我试着在xml中给ImageButton设置src属性android:src="@drawable/pl",在myImageView.setOnClickListener中添加了myImageView.setImageDrawable(getResources().gerDrawable(R.drawable.pl2);虽然图片切换了,但是问题和上面第3个一样,希望帮忙解答一下、
大约 4 年之前 回复
aduovip
aduovip   2013.11.30 12:02

要从列表的数据的变动着手,当点击按钮,背景图片发生变化时,把这一条目存储在一个Map对象,缓存起来,并且adapter要 notifyDataSetChanged(); 这样就记录下了已点击的按钮。

zxl881209
zxl881209   2014.07.28 23:43
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!