无法从适配器内部更新imageButton

时间:2015-07-03 15:39:27

标签: android android-adapter

我想在点击它时更改图像按钮的图像。这个imageButton是布局输出文件的一部分,我在我的自定义适配器中充气,它将一种卡片视图(带有几个按钮的图像)提供给我的主容器布局。

我在CustomAdapter.java中添加了imagebutton监听器:

cardHolder.mLikeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("Sushil", "clicked like button!!!!!");
updateHeartButton(true);
}
});

当我点击按钮时,我的监听器被调用,并从内部调用一个方法来更新按钮的图像:

private void updateHeartButton(boolean animated) {
cardHolder.mLikeButton.setImageResource(R.drawable.ic_heart_red);
}

但是图像按钮没有更新新图像。有人可以帮助我。

谢谢

3 个答案:

答案 0 :(得分:2)

由于cardHolder发生变化(适配器getView()的一部分),将调用最后一个cardHolder,而不是被调用的那个。

请按照以下方式更改您的代码,然后重试:

cardHolder.mLikeButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Log.i("Sushil", "clicked like button!!!!!");
        ((ImageButton) view).setImageResource(R.drawable.ic_heart_red);
    }
});

答案 1 :(得分:0)

这项工作对我来说

cardHolder.mLikeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
  cardHolder.mLikeButton.setImageResource(R.drawable.ic_heart_red);
}
});

答案 2 :(得分:0)

尝试使用setBackgroundResource(R.drawable.ic_heart_red);

或以其他方式,如果您需要在点击它时返回上一张图片:

您可以在drawable文件夹中创建一个btn.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
       <!-- When selected, use grey -->
    <item android:drawable="@drawable/like_selected"
          android:state_selected="true" />
    <!-- When not selected, use white-->
    <item android:drawable="@drawable/like_normal"/>

</selector>

在按钮的xml中,将此xml设置为背景:

android:background="@drawable/btn"

在updateHeartButton()方法中,您可以使用:

cardHolder.mLikeButton.setSelected(true)