gpt4 book ai didi

java - 更改 ListView 的一个元素

转载 作者:行者123 更新时间:2023-12-01 10:11:05 25 4
gpt4 key购买 nike

我想更改 ListView 的特定行中的一项 (ImageView)。现在我尝试通过 onItemClickListener 提供的 View 来更改它。它也有效!

但不知何故,当我上下滚动时,其他 ListView 行也发生了变化。我发现了一些关于问题“查看回收”的信息,但我确实没有找到解决方案。

有人可以帮忙吗?

编辑:这里有一些代码:

我的听众:

LV.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
...
updateEQAnimation(position,view);
...
}

应该改变它的函数

private void updateEQAnimation(int index, View view){

ColorStateList sColorStatePlaying;
ColorStateList sColorStateNotPlaying;

sColorStatePlaying = ColorStateList.valueOf(context.getResources().getColor(R.color.colorPrimary));

if(view == null)
return;
AnimationDrawable animation = (AnimationDrawable) ContextCompat.getDrawable(context, R.drawable.anim_current_song);
ImageView EQ_ANIM = (ImageView) view.findViewById(R.id.imageView_eq_animation);
EQ_ANIM.setVisibility(View.VISIBLE);
EQ_ANIM.setImageDrawable(animation);
EQ_ANIM.setImageTintList(sColorStatePlaying);
animation.start();}

getView方法:

 @Override
public View getView(int position, View view, ViewGroup parent) {
View rview = view;
holder = null;

if (rview == null)
{
LayoutInflater inflater = context.getLayoutInflater();
rview= inflater.inflate(R.layout.row_song, null, true);
holder = new ViewHolder(rview);
rview.setTag(holder);
}
else
{
holder = (ViewHolder) rview.getTag();
}

mArtLoader.loadBitmap(AL_songlist.get(position).getAlbumArtPath(), holder.imgAlbumart);
holder.txtTitle.setText(AL_songlist.get(position).getTitle());
holder.txtArtist.setText(AL_songlist.get(position).getArtist());

if(Main.songService.svc_mpcontroller != null && Main.global_music_controller != null) {
if (AL_songlist.get(position).getID() == Main.global_music_controller.get_current_id()) {
ColorStateList sColorStatePlaying;
ColorStateList sColorStateNotPlaying;

sColorStatePlaying = ColorStateList.valueOf(context.getResources().getColor(R.color.colorPrimary));
AnimationDrawable animation = (AnimationDrawable) ContextCompat.getDrawable(context, R.drawable.anim_current_song);
holder.imgEQAnimation.setVisibility(View.VISIBLE);
holder.imgEQAnimation.setImageDrawable(animation);
holder.imgEQAnimation.setImageTintList(sColorStatePlaying);
animation.start();
}
}

return rview;
}

最佳答案

首先我将解释 View 回收,然后我将解决您的问题。假设您可以同时在屏幕上看到 8 个列表项。当您向下滚动列表并且项目编号 1 离开屏幕而项目编号 10 出现在屏幕上时,项目编号 10 将重用项目编号 1 的 View 。这意味着项目编号 10 将看起来与项目编号 1 完全相同,除非您在适配器 getView 方法中相应地更新它。

现在我们了解了 View 回收,您可以明白为什么其他项目将具有您的新可绘制对象,即使您没有单击它们。您必须在用于适配器的数据集中存储哪些项目具有该图像,无论它是适配器中的 ArrayList 还是适配器使用的自定义对象。然后在适配器的 getView 中,您可以执行以下操作:

if(hasImage)
{
ColorStateList sColorStatePlaying;
ColorStateList sColorStateNotPlaying;

sColorStatePlaying = ColorStateList.valueOf(context.getResources().getColor(R.color.colorPrimary));
AnimationDrawable animation = (AnimationDrawable) ContextCompat.getDrawable(context, R.drawable.anim_current_song);
ImageView EQ_ANIM = (ImageView) view.findViewById(R.id.imageView_eq_animation);
EQ_ANIM.setVisibility(View.VISIBLE);
EQ_ANIM.setImageDrawable(animation);
EQ_ANIM.setImageTintList(sColorStatePlaying);
animation.start();
}
else
{
// Set the default image
}

编辑:您应该在 getView

中添加 else 语句
    if(Main.songService.svc_mpcontroller != null && Main.global_music_controller != null) {
if (AL_songlist.get(position).getID() == Main.global_music_controller.get_current_id()) {
ColorStateList sColorStatePlaying;
ColorStateList sColorStateNotPlaying;

sColorStatePlaying = ColorStateList.valueOf(context.getResources().getColor(R.color.colorPrimary));
AnimationDrawable animation = (AnimationDrawable) ContextCompat.getDrawable(context, R.drawable.anim_current_song);
holder.imgEQAnimation.setVisibility(View.VISIBLE);
holder.imgEQAnimation.setImageDrawable(animation);
holder.imgEQAnimation.setImageTintList(sColorStatePlaying);
animation.start();
}
}
else
holder.imgEQAnimation.setVisibility(View.GONE);

关于java - 更改 ListView 的一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36108411/

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