Android:在一个ListView项目中更改ImageView会在其他ListView项目中更改相同的ImageView吗?
我的Android:在一个ListView项目中更改ImageView会在其他ListView项目中更改相同的ImageView吗?,android,listview,Android,Listview,我的列表视图项由以下组件组成-文本视图,然后在它下面有一个图像视图-类似 因此,当我单击like时,我希望能够将like图像视图从灰色更改为蓝色 当我点击like时,like图像视图确实从灰色变为蓝色。但不仅针对相应的列表视图项目,而且针对列表中的每三个项目-因此,如果我的列表中有10个项目,我单击列表中第一个项目的like,那么第四、第七和第十个项目like图像视图将从灰色变为蓝色 在我的post\u list\u item.xml中,在文件的根元素中,我指定了以下android:gender
列表视图
项由以下组件组成-文本视图
,然后在它下面有一个图像视图
-类似
因此,当我单击like
时,我希望能够将like
图像视图从灰色更改为蓝色
当我点击like
时,like
图像视图确实从灰色变为蓝色。但不仅针对相应的列表视图
项目,而且针对列表中的每三个项目-因此,如果我的列表中有10个项目,我单击列表中第一个项目的like
,那么第四、第七和第十个项目like
图像视图
将从灰色变为蓝色
在我的post\u list\u item.xml中,在文件的根元素中,我指定了以下android:genderantfocusability=“blocksDescendants”
,但它也没有帮助
我的问题是-我必须做些什么,以便当我点击like
时,我能够将like
图像视图从灰色更改为蓝色,而不影响其他列表项
这是我的密码:
public class CustomListAdapter extends BaseAdapter {
LayoutInflater inflater;
ArrayList<Post> list;
public CustomListAdapter(PostActivity postActivity, ArrayList<Post> list) {
inflater = LayoutInflater.from(postActivity);
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.post_list_item, parent, false);
holder = new ViewHolder();
holder.tvPost = (TextView) convertView.findViewById(R.id.tvPost);
holder.ivLike = (ImageView) convertView.findViewById(R.id.ivLike);
holder.tvLikes = (TextView) convertView.findViewById(R.id.tvLikeCount);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Post post = list.get(position);
holder.tvPost.setText(post.getPost());
holder.tvLikes.setText(post.getLiked());
holder.ivLike.setOnClickListener(mClickListener);
holder.ivLike.setTag(position);
return convertView;
}
private View.OnClickListener mClickListener = new View.OnClickListener() {
public void onClick(View v) {
int pos = (Integer) v.getTag();
Post post = (Post) list.get(pos);
post.setIvLike(v);
CustomListAdapter.this.notifyDataSetChanged();
}
};
static class ViewHolder
{
TextView tvPost ;
TextView tvLikes;
ImageView ivLike;
}
}
重用视图时,您不会在getView
中“重置”视图。您需要将回收视图设置回正确的状态。这是在创建或重用ViewHolder的if else块之后完成的
setIvLike
需要以这样或那样的方式修改Post对象,以便在将其滚动到屏幕外时,即使使用循环视图,也可以完全按照显示的方式重新创建视图。因此,重要的是要知道您更改了视图的哪些属性,并在重用/创建后一致地在getView中设置每个属性
你需要在你的Post类中有一个属性来跟踪你喜欢的帖子
更新的Post.Java
public class Post {
String post;
String liked;
public bool isLiked; // Add this
public void setIvLike(View view){
if(!isLiked)
view.setActivated(false);
else
view.setActivated(true);
}
public String getPost() {
return post;
}
public void setPost(String post) {
this.post= post;
}
public String getLiked() {
return liked;
}
public void setLiked(String liked) {
this.liked = liked;
}
}
和适配器的getView方法中
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.post_list_item, parent, false);
holder = new ViewHolder();
holder.tvPost = (TextView) convertView.findViewById(R.id.tvPost);
holder.ivLike = (ImageView) convertView.findViewById(R.id.ivLike);
holder.tvLikes = (TextView) convertView.findViewById(R.id.tvLikeCount);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Post post = list.get(position);
holder.tvPost.setText(post.getPost());
holder.tvLikes.setText(post.getLiked());
holder.ivLike.setOnClickListener(mClickListener);
holder.ivLike.setTag(position);
holder.setIvLike(ivLike); // Add this
return convertView;
}
private View.OnClickListener mClickListener = new View.OnClickListener() {
public void onClick(View v) {
int pos = (Integer) v.getTag();
list.get(pos).isLiked = true;
// post.setIvLike(v); // No need to update here
CustomListAdapter.this.notifyDataSetChanged();
}
};
比你好多了。我花了一个多星期的时间在这张表格上苦苦挣扎,终于成功了。谢谢你花时间回答我的问题。
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.post_list_item, parent, false);
holder = new ViewHolder();
holder.tvPost = (TextView) convertView.findViewById(R.id.tvPost);
holder.ivLike = (ImageView) convertView.findViewById(R.id.ivLike);
holder.tvLikes = (TextView) convertView.findViewById(R.id.tvLikeCount);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Post post = list.get(position);
holder.tvPost.setText(post.getPost());
holder.tvLikes.setText(post.getLiked());
holder.ivLike.setOnClickListener(mClickListener);
holder.ivLike.setTag(position);
holder.setIvLike(ivLike); // Add this
return convertView;
}
private View.OnClickListener mClickListener = new View.OnClickListener() {
public void onClick(View v) {
int pos = (Integer) v.getTag();
list.get(pos).isLiked = true;
// post.setIvLike(v); // No need to update here
CustomListAdapter.this.notifyDataSetChanged();
}
};