在我的Android应用中,我的主Activity
扩展了List Activity
。我存储了名为Items的元素,它们的布局由itemLayout xml文件定义,我使用自定义适配器(称为ItemAdapter
)将数据传输到Main Activity中的List View。在itemLayout中有一个ImageView
,我的目的是在用户点击列表视图中的特定项目时更改其图像。在我看来,实现这一目标的最简单方法是访问特定项目(被点击的项目)布局,找到ImageView
和调用方法setImageBitmap
。如何“找到”点击项目的这种布局?我在方法中尝试了很多东西:
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
}
但没有任何效果。我是否必须向ItemAdapter添加任何内容?或者可以在onListItemClick(…)
中进行,但我不知道如何做到?
答案 0 :(得分:4)
你正在以一种错误的方式思考它。适配器是一种将数据映射到视图的方法。因此,如果要更改特定视图查找给定位置的方式,则需要更改其关联数据,以便渲染的视图随后更改。试图直接修改视图有点违背了如何使用适配器。
因此,在您的情况下,当用户点击某个项目时。通过位置编号在适配器中找到该项目。然后更新项目并确保调用notifydataset。同时,适配器的getView()
将处理显示相应的图像。
答案 1 :(得分:0)
据我所知,你需要修改点击的项目布局,对吧?使用onListItemClicked中的参数:
v.findViewById(<your_img_view_id>)
为了获得更好的性能,请使用视图持有者。
答案 2 :(得分:0)
onListItemClick
的元素时会触发 ListView
。如果要检索数据集中的元素,只需调用
l.getItemAtPosition(position)
返回的值必须转换为特定对象
答案 3 :(得分:0)
是可以在adapter
格式的自定义getView()
课程中通过点击来更改图片视图位图
请参阅此代码
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View rowView = convertView;
rowView = inflater.inflate(R.layout.playlist_item, null);
final ImageView im = (ImageView) rowView.findViewById(R.id.favorite);
im.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Do your stuff here
}
});
return rowView;
}