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; 
    } 
+0

任何人都可以帮忙吗?这真是令人沮丧,因为我已经看了很多关于它的帖子,而我似乎适合所有的答案。此外,我刚刚注意到,从肖像到风景再到肖像的每次切换都会产生两个重复。 – ProdigousRanger

+0

convertView.setTag(holder);

+0

好吧,如果它在那里,那么它只是将标签设置为它刚刚找到的标签,所以应该移动以避免不必要的指令,但它对重复元素没有任何作用。感谢您提醒我。 – ProdigousRanger

我发现问题。它与代码无关。清单需要修改,以便在定位更改时不会刷新活动。通过将android:configChanges="orientation"添加到清单中的活动,它可以很好地工作。