gpt4 book ai didi

java - Listview onClick更改图像中的Android Imageview无法正常工作

转载 作者:行者123 更新时间:2023-11-30 02:43:42 26 4
gpt4 key购买 nike

我有一个 ListView,在每个 ListviewItem 中都有一个带小星的 ImageView(用于将其标记为 Collection )。因此,我在自定义 ArrayAdapter 中的每个项目上为 ImageView 放置了一个 OnClickListener。

imgStar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Bitmap bitmap = ((BitmapDrawable)imgStar.getDrawable()).getBitmap();
Bitmap bitmap2 = ((BitmapDrawable)(context.getResources().getDrawable(R.drawable.ic_action_not_important))).getBitmap();

if(bitmap != bitmap2) {
imgStar.setImageResource(R.drawable.ic_action_not_important);
} else {
imgStar.setImageResource(R.drawable.ic_action_important);
}
}
});

问题:当我得到一些元素并点击例如第一个元素的星标时,图像会按应有的方式改变,但一些元素会降低图像也会改变 o.O我用一些代码测试了它:不会进入我脑海的是它只是改变图像(在下面的另一个项目上),将在 onclick 中执行的代码只对我真正点击的项目执行对于图像也发生变化的那个。

为什么列表中其他随机项目的图像也会发生变化?我希望有人能帮助我。

自定义适配器构造代码

public LinkArrayAdapter(Context con, int textViewResourceId) {
super(con, textViewResourceId);
context = con;

}

最佳答案

主要问题是您无法在 onClick 中更改项目的图像然后保留它并希望它会在列表中的每个项目上更新。因为 onClick 的调用时间与 getView 的调用时间不同。因此,您必须在 onClick 之外但在 getView 中设置项目图像,因此每次 getView 调用特定项目时,它都会设置适当的图像对于那个项目。

在您的 CustomAdapter 类中定义一个 boolean 数组:

private boolean[] stars;

然后在类的构造方法中,将其初始化为:

this.stars = new boolean[items.size()];

onClick 方法中:

// **Edited to apply image update at click**
stars[position] = !stars[position];
notifyDataSetInvalidated();

最后在自定义适配器的getView()方法中(确保此代码在任何其他内部 block 中):

if (stars[position])
imgStar.setImageResource(R.drawable.ic_action_important);
else
imgStar.setImageResource(R.drawable.ic_action_not_important);

关于java - Listview onClick更改图像中的Android Imageview无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25403293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com