Android的listview重复元素
问题描述:
我有一个列表视图,那将根据arraylist动态填充。我有一个定义的自定义arrayadapter类。该列表的作品完全正确,除了当我从横向到纵向旋转屏幕时,列表重复3次每个元素。这里是getView函数的代码。Android的listview重复元素
行=(ListView中)findViewByid(R.id.listview1); //在适配器构造
公共视图getView(INT位置,查看convertView,父的ViewGroup){
ViewHolder holder;
if(convertView == null){
LayoutInflater inflater =getLayoutInflater();
convertView = inflater.inflate(R.layout.player_slot,null);
holder = new ViewHolder(convertView, position);
}
else holder = (ViewHolder) convertView.getTag();
holder.player_name = (TextView) convertView.findViewById(R.id.name);
holder.player_score = (TextView) convertView.findViewById(R.id.score);
holder.dec_score = (Button) convertView.findViewById(R.id.decrement);
holder.inc_score = (Button) convertView.findViewById(R.id.increment);
holder.dec_score.setTag(holder);
holder.inc_score.setTag(holder);
convertView.setTag(holder);
Button dec = (Button)convertView.findViewById(R.id.decrement);
Button inc =(Button)convertView.findViewById(R.id.increment);
TextView name = (TextView)convertView.findViewById(R.id.name);
TextView score = (TextView)convertView.findViewById(R.id.score);
System.out.println("tag = " +dec.getTag());
Player temp = getPlayer(position);
System.out.println(temp.getPlayer_name() + temp.getPlayer_score());
if(temp != null){
//holder.player_name.setText(temp.getPlayer_name());
//holder.player_score.setText(""+temp.getPlayer_score());
name.setText(temp.getPlayer_name());
score.setText(""+temp.getPlayer_score());
}
dec.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int position = rows.getPositionForView((View)v.getParent());
Player temp = getPlayer(position);
System.out.println("Player "+ temp.getPlayer_name() + "'s score changed");
temp.setPlayer_score(temp.getPlayer_score()-score_increment);
PlayerAdapter.this.notifyDataSetChanged();
}
});
inc.setOnClickListener(new OnClickListener(){
private Button dec;
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int position = rows.getPositionForView((View)v.getParent());
Player temp = getPlayer(position);
System.out.println("Player "+ temp.getPlayer_name() + "'s score changed");
temp.setPlayer_score(temp.getPlayer_score()+score_increment);
PlayerAdapter.this.notifyDataSetChanged();
}
});
return convertView;
}
答
我发现问题。它与代码无关。清单需要修改,以便在定位更改时不会刷新活动。通过将android:configChanges="orientation"
添加到清单中的活动,它可以很好地工作。
任何人都可以帮忙吗?这真是令人沮丧,因为我已经看了很多关于它的帖子,而我似乎适合所有的答案。此外,我刚刚注意到,从肖像到风景再到肖像的每次切换都会产生两个重复。 – ProdigousRanger
convertView.setTag(holder);
好吧,如果它在那里,那么它只是将标签设置为它刚刚找到的标签,所以应该移动以避免不必要的指令,但它对重复元素没有任何作用。感谢您提醒我。 – ProdigousRanger