无法从内部适配器更新 imageButton

Cannot update imageButton from inside adapter

我想在点击 imagebutton 时更改它的图像。这个 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);
}

但是图像按钮没有更新为新图像。谁能帮帮我。

谢谢

由于 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);
    }
});

这对我有用

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

试试 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)