使用自定义适配器更改 ListView 中特定行中的 ImageView
Posted
技术标签:
【中文标题】使用自定义适配器更改 ListView 中特定行中的 ImageView【英文标题】:Changing ImageView in a specific row in ListView with custom adapter 【发布时间】:2019-09-16 16:46:17 【问题描述】:我正在尝试更改 ListView
中特定行中的 ImageView
使用自定义适配器。
每当我更改一行时,其他行也会受到影响。 我会很感激你的帮助。 谢谢你。 这是我在 MainActivity 类中的代码
adapter= new CustomAdapter(dataModels,getApplicationContext());
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
Toast.makeText(MainActivity.this, position+" ",
Toast.LENGTH_LONG).show();
DataModel dataModel= dataModels.get(position);
Snackbar.make(view, dataModel.getName()+"\n"+dataModel.getType(), Snackbar.LENGTH_LONG)
.setAction(" ", null).show();
ImageView imgv = (ImageView)view.findViewById(R.id.item_info);
imgv.setImageResource(R.drawable.fav);
adapter.notifyDataSetChanged();
i= Integer.parseInt(dataModel.getVersion_number());
rotate();
StartNewSong();
);
这里是自定义适配器中的代码
public View getView(int position, View convertView, ViewGroup parent)
// Get the data item for this position
DataModel dataModel = getItem(position);
// Check if an existing view is being reused, otherwise inflate the view
final View result;
if (convertView == null)
viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.row_item, parent, false);
viewHolder.txtName = (TextView) convertView.findViewById(R.id.name);
viewHolder.txtType = (TextView) convertView.findViewById(R.id.type);
viewHolder.info = (ImageView) convertView.findViewById(R.id.item_info);
result=convertView;
convertView.setTag(viewHolder);
else
viewHolder = (ViewHolder) convertView.getTag();
result=convertView;
Animation animation = AnimationUtils.loadAnimation(mContext, (position > lastPosition) ? R.anim.up_from_bottom : R.anim.down_from_top);
result.startAnimation(animation);
lastPosition = position;
viewHolder.txtName.setText(dataModel.getName());
viewHolder.txtType.setText(dataModel.getType());
check = dataModel.getImageApp();
if (check == "false")
else if (check !="false")
Picasso.get()
.load(check)
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.into(viewHolder.info);
viewHolder.info.setOnClickListener(this);
viewHolder.info.setTag(position);
// Return the completed view to render on screen
return convertView;
这是显示为 gif 的问题 problem as a gif
我的数据模型类
公共类数据模型
String name;
String type;
String id;
String imageApp;
String url;
public DataModel(String name, String type, String id, String imageApp, String url)
this.name=name;
this.type=type;
this.id=id;
this.imageApp=imageApp;
this.url=url;
public String getName()
return name;
public String getType()
return type;
public String getVersion_number()
return id;
public String getImageApp()
return imageApp;
public String getUrl()
return url;
【问题讨论】:
这里是什么imageApp
【参考方案1】:
在您的 DataModel
类中创建一个名为 isSelected
的布尔变量,并按如下方式更改您的构造函数。
public DataModel(String name, String type, String id, String imageApp, String url, boolean isSelected)
this.name=name;
this.type=type;
this.id=id;
this.imageApp=imageApp;
this.url=url;
this.isSelected = isSelected;
这将用于确定是否选择了一个项目。
为isSelected
创建getter 和setter。
当您创建 DataModel
对象时,将 isSelected
作为 false
传递给您的构造函数。
在您的适配器中检查isSelected
的值以设置相应的图像。
if (dataModel.isSelected)
Picasso.get()
.load(your_selected_imageview)
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.into(viewHolder.info);
并且在您的列表视图的项目单击侦听器中不要更改imageview
,而只需将相应DataModel
对象的isSelected
值设置为true。
DataModel dataModel = dataModels.get(position);
dataModel.setIsSelected(true);
adapter.notifyDataSetChanged();
【讨论】:
它仍然改变不止一个原始文件 能否请您发布您的DataModel
课程以上是关于使用自定义适配器更改 ListView 中特定行中的 ImageView的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用自定义适配器的情况下从 ListView 获取特定的 TextView (View)?
在自定义适配器类中发送服务器请求后,如何更改 Listview 按钮名称?
在listview中的addTextChangedListener中使用自定义列表适配器