如何更改在列表视图中单击的项目的图像资源
我有一个自定义的ListView,左边有一个ImageView,后面跟着一个EditText,右边有另一个ImageView,起初没有任何源代码。
然后我在这个视图上有一个onItemClickListener。 我想在项目点击右侧更改ImageView的源代码(最初没有任何源代码的源代码)。
为此我已经实现了这个代码:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ImageView icone2 = (ImageView) view.findViewById(R.id.icone2_lugar);
icone2.setImageResource(R.drawable.flag_origem);
}
ImageView成功插入到点击的项目上。 但是,当我向下滚动列表时,我意识到在滚动列表之前点击的位置上的所有其他元素也改变了图像资源。
为什么会发生? 我猜Android加载新的视图滚动列表,而不是同时加载所有元素视图,所以我想我不能通过使用onItemClick的View参数来更改列表中元素的资源。
那么如何才能在列表视图中更改单击元素的资源?
编辑:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View linha = convertView;
ArmazenadorLugar armazenador = null;
if (linha == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
linha = inflater.inflate(R.layout.linha_lugar, parent, false);
armazenador = new ArmazenadorLugar(linha);
linha.setTag(armazenador);
} else {
armazenador = (ArmazenadorLugar) linha.getTag();
}
armazenador.popularFormulario(mListaLugares.get(position), mContext);
return linha;
}
public LugarAndroid getItem(int position) {
return mListaLugares.get(position);
}
我以不同的方式结束了这一过程。 不知道它是否更好,但它的工作原理。
我在我的适配器中创建了一个变量(imgPosition),它将保存必须设置图像资源的元素位置。 然后,只要我点击一个元素,监听器就会调用
adapter.setImgPosition(position);
adapter.getView(position, view, parent);
我在监听器中调用了getView方法来刷新列表,因为getView调用一个方法(我将在下面解释它)来更新列表。 在适配器类的getView方法中,我有以下逻辑(位置元素来自getView参数):
holder.setValues(mListaLugares.get(position), mContext, imgPosition == position);
持有人:
static class Holder{
private TextView txt1= null;
private ImageView img1 = null;
private ImageView img2 = null;
Holder(View linha) {
txt1= (TextView) linha.findViewById(R.id.txt1);
img1 = (ImageView) linha.findViewById(R.id.img1 );
img2 = (ImageView) linha.findViewById(R.id.img2);
}
void setValues(LugarAndroid lugar, Context mContext, boolean setImg) {
img2.setImageResource(0);
if(setImg) img2.setImageResource(R.drawable.flag);
// Logic to fill up the others views
}
这样我只会设置当传递的布尔值为true时单击的元素的图像资源
如果您使用的是具有对象列表的适配器,则可以使用:
getItem(position)
,然后更改此特定对象的imageview图像
上一篇: How to change the image resource of a item clicked in a list view
下一篇: Insert a single view inside a listview makes listItem non clickable