Android中ListView,点击一个item所有item响应
lv.setOnItemClickListener(newAdapterView.OnItemClickListener(){@OverridepublicvoidonI...
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ConvertEntity convertEntity= list.get(position);
ConvertEntity convertEntity = convertAdapter.getItem(position);
if(convertEntity.getState()==0) {
convertEntity.setState(1);
// convertAdapter.clearAdapter();
}else if(convertEntity.getState()==1){
convertEntity.setState(0);
// convertAdapter.clearAdapter();
}
convertAdapter.notifyDataSetChanged();
}
});
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null ;
if(convertView == null){
convertView = layoutInflater.inflate(R.layout.item_convert,null);
viewHolder = new ViewHolder();
viewHolder.tv_convert = (TextView)convertView.findViewById(R.id.tv_item_convert);
viewHolder.tv_convertcenima = (TextView)convertView.findViewById(R.id.tv_item_convertcenima);
viewHolder.tv_convertname = (TextView)convertView.findViewById(R.id.tv_item_convertname);
viewHolder.iv_convert = (ImageView) convertView.findViewById(R.id.iv_item_convertpicture);
viewHolder.rl = (RelativeLayout)convertView.findViewById(R.id.rl_convert);
convertView.setTag(viewHolder);
}else {
viewHolder = (ViewHolder) convertView.getTag();
}
ConvertEntity convertEntity = getItem(position);
viewHolder.tv_convertcenima.setText(convertEntity.getTv_convertcenima());
viewHolder.tv_convertname.setText(convertEntity.getTv_convertname());
viewHolder.tv_convert.setText(convertEntity.getTv_convert());
if(convertEntity.state==0){
viewHolder.rl.setVisibility(View.GONE);
}else if(convertEntity.state==1){
viewHolder.rl.setVisibility(View.VISIBLE);
}
return convertView;
} 展开
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ConvertEntity convertEntity= list.get(position);
ConvertEntity convertEntity = convertAdapter.getItem(position);
if(convertEntity.getState()==0) {
convertEntity.setState(1);
// convertAdapter.clearAdapter();
}else if(convertEntity.getState()==1){
convertEntity.setState(0);
// convertAdapter.clearAdapter();
}
convertAdapter.notifyDataSetChanged();
}
});
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null ;
if(convertView == null){
convertView = layoutInflater.inflate(R.layout.item_convert,null);
viewHolder = new ViewHolder();
viewHolder.tv_convert = (TextView)convertView.findViewById(R.id.tv_item_convert);
viewHolder.tv_convertcenima = (TextView)convertView.findViewById(R.id.tv_item_convertcenima);
viewHolder.tv_convertname = (TextView)convertView.findViewById(R.id.tv_item_convertname);
viewHolder.iv_convert = (ImageView) convertView.findViewById(R.id.iv_item_convertpicture);
viewHolder.rl = (RelativeLayout)convertView.findViewById(R.id.rl_convert);
convertView.setTag(viewHolder);
}else {
viewHolder = (ViewHolder) convertView.getTag();
}
ConvertEntity convertEntity = getItem(position);
viewHolder.tv_convertcenima.setText(convertEntity.getTv_convertcenima());
viewHolder.tv_convertname.setText(convertEntity.getTv_convertname());
viewHolder.tv_convert.setText(convertEntity.getTv_convert());
if(convertEntity.state==0){
viewHolder.rl.setVisibility(View.GONE);
}else if(convertEntity.state==1){
viewHolder.rl.setVisibility(View.VISIBLE);
}
return convertView;
} 展开
1个回答
展开全部
想问下题主,你点一个item确定是所有的item跟着相应而不是仅有规律性地几个item跟着响应么?我想这个现象是因为convertView的服用引起的。你改变一个item的布局状态(改变一个控件的可见状态),那么会有其他几个复用这个item的布局的item会一起变化。我给的建议是在adapter的getView()方法中,只修改所点击的条目的viewHolder.rl控件的可视状态,同时设置其他未被点击的item的viewHolder.rl控件的可视状态不变。注意,这个后面的“同时”非常重要。我能想到的可行方法:(很有可能会有更好的方法,但本人能力有限只想到这个==题主可以自由发挥)创建一个List<boolean> list集合,集合长度为条目的个数,初始化时先将list里面所有值置为false,意为未被点击。在你的lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
}
});
这个方法中写list.set(position,true);
然后在adapter中的getView()方法中绑定数据的时候先判断if(list.get(position)==true){}。如果是的话再进行viewHolder.rl控件的可视状态相应的改变。最后最重要的一步,在else{}里面实现viewHolder.rl控件的可视状态不变。这样试一下应该就可以了。楼主试一下吧~
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
}
});
这个方法中写list.set(position,true);
然后在adapter中的getView()方法中绑定数据的时候先判断if(list.get(position)==true){}。如果是的话再进行viewHolder.rl控件的可视状态相应的改变。最后最重要的一步,在else{}里面实现viewHolder.rl控件的可视状态不变。这样试一下应该就可以了。楼主试一下吧~
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询