在平时写代码中会经常碰到要点击ListView item 修改item的布局这种做法。
我在做这个功能的时候碰到一个问题。 点击item 中布局修改UI 改变的总是最后一个item的UI。
然后就一步一步排查。1.ViewHoder不要是全局变量 2.不要在getview中直接修改布局。
直接贴代码吧。思路就是在onclick事件中改变数据通过回调刷新Ui。
Java:
private String[]num ={"0","0","0","0"}; //判断是否点击0
for(int i=0;i<num.length;i++){
HashMap<String,String> map= new HashMap<>();
map.put("isCheck",num[i]);
shops.add(map);
}
adapter =new colliconAdapter(Collicon.this,shops,0);
adapter.seOnclick(this);
MyList.setAdapter(adapter );
Adapter: 在Adapter中做个判断,因为你点击按钮了,会做刷新。然后会走getView方法。所以在getView方法中做这个判断。
if(l.get(position).get("isCheck").equals("0"))
{
holder.more.setVisibility(View.VISIBLE);
holder.edit.setVisibility(View.GONE);
}else{
holder.more.setVisibility(View.GONE);
holder.edit.setVisibility(View.VISIBLE);
}
//修改数据,并添加回调
holder.more.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
l.get(position).put("isCheck","1");
changeui.changeui(position);
}
});
“`