2012-07-19 88 views
2

我检查了数组menuItems,它似乎很好,但在下面的代码中有错误。 当我开始它看起来还好,但是当我开始滚动它被搞砸了,并把项目的列表和重复项的顶部....这为什么我会在我的listview中获得重复项目?

public class ScoresAdapter extends BaseAdapter { 

private MainActivity activity; 
private ScoreItem[] menuItems; 
private static LayoutInflater inflater=null; 
ImageDownloader downloader; 

public ScoresAdapter(MainActivity a, ScoreItem[] scoreItems) { 
    activity = a; 
    menuItems = scoreItems; 
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    downloader = new ImageDownloader(); 
} 

public int getCount() { 
    int teller = 0; 

    for(int i = 0 ; menuItems.length > i ; i++){ 
     if(menuItems[i] != null){ 
      teller++; 
     } 
    } 

    return teller; 
} 

public Object getItem(int position) { 
    return position; 
} 

public long getItemId(int position) { 
    return position; 
} 

public View getView(final int position, View convertView, ViewGroup parent) {   
    View vi=convertView; 
    if(convertView==null){  
     if(menuItems[position].getId() == 888){ 
      //fav header 
      vi = inflater.inflate(R.layout.scoresheaderfavoriet, null); 

     }else if(menuItems[position].getId() == 999){ 
      //overige header 
      vi = inflater.inflate(R.layout.scoresheaderoverig, null); 

     }else{ 



      if(menuItems[position].getIsFav()){ 
       vi = inflater.inflate(R.layout.scoresfavitem, null); 
      }else{ 
       vi = inflater.inflate(R.layout.scoresitem, null); 
      } 

      TextView text2=(TextView)vi.findViewById(R.id.position); 
      text2.setText(""+ menuItems[position].getPosition()); 

      TextView text=(TextView)vi.findViewById(R.id.name); 
      text.setText(menuItems[position].getFirstName() + " " + menuItems[position].getLastName().toUpperCase()); 

      TextView text5=(TextView)vi.findViewById(R.id.country); 
      text5.setText(""+ menuItems[position].getCountry()); 

      TextView text3=(TextView)vi.findViewById(R.id.score); 
      text3.setText(""+ menuItems[position].getScore()); 

      TextView text8=(TextView)vi.findViewById(R.id.hole); 
      text8.setText(""+ menuItems[position].getHole()); 

      vi.setOnClickListener(new OnClickListener() { 
       public void onClick(View v) { 
        Intent intent = new Intent(v.getContext(), SpelerView.class); 
        intent.putExtra("id", menuItems[position].getId()); 
        v.getContext().startActivity(intent); 

        activity.sluitAlleMenus(); 
       } 
      }); 
     } 


    } 



    return vi; 
} 
} 
+0

如果convertView不是null你什么都不做吧,但你应该。 convertView - 是不在屏幕上的回收物品。您已经将数据传递给它。所以,你应该改变这些数据。 – bluebyte 2012-07-19 15:42:17

+0

@Jay Biggue如果你已经解决然后发布我有同样的问题 – PankajAndroid 2013-10-18 12:04:32

回答

0

我有同样的问题曾经只是怪异。我想这是因为适配器的“缓存”的...你应该实现一个else这样的:

if(convertView==null){ 
    holder = new NodeViewHolder(); 
    //Your stuff 
    convertView.setTag(holder); 
}else{ 
    holder = (NodeViewHolder) convertView.getTag(); 
} 

public static class NodeViewHolder { 
    TextView text; 
    TextView text2; 
    TextView text3; 
    //So on... 
} 

当查看缓存(NOT NULL)它会被执行

0

你是不是处理你的情况,当你的convertView不正确为空。改变你的代码是这样的:

public View getView(final int position, View convertView, ViewGroup parent) {   
    View vi=convertView; 
    if(convertView==null){  
     if(menuItems[position].getId() == 888){ 
      //fav header 
      vi = inflater.inflate(R.layout.scoresheaderfavoriet, null); 

     }else if(menuItems[position].getId() == 999){ 
      //overige header 
      vi = inflater.inflate(R.layout.scoresheaderoverig, null); 

     }else{ 



      if(menuItems[position].getIsFav()){ 
       vi = inflater.inflate(R.layout.scoresfavitem, null); 
      }else{ 
       vi = inflater.inflate(R.layout.scoresitem, null); 
      } 


     } 


    } 
      TextView text2=(TextView)vi.findViewById(R.id.position); 
      text2.setText(""+ menuItems[position].getPosition()); 

      TextView text=(TextView)vi.findViewById(R.id.name); 
      text.setText(menuItems[position].getFirstName() + " " + menuItems[position].getLastName().toUpperCase()); 

      TextView text5=(TextView)vi.findViewById(R.id.country); 
      text5.setText(""+ menuItems[position].getCountry()); 

      TextView text3=(TextView)vi.findViewById(R.id.score); 
      text3.setText(""+ menuItems[position].getScore()); 

      TextView text8=(TextView)vi.findViewById(R.id.hole); 
      text8.setText(""+ menuItems[position].getHole()); 

      vi.setOnClickListener(new OnClickListener() { 
       public void onClick(View v) { 
        Intent intent = new Intent(v.getContext(), SpelerView.class); 
        intent.putExtra("id", menuItems[position].getId()); 
        v.getContext().startActivity(intent); 

        activity.sluitAlleMenus(); 
       } 
      }); 





    return vi; 
} 

这会让你最有方法。您可能必须将您的收藏夹和/或页眉页脚逻辑移出if(convertView ==null)。虽然我不能完全说出你在做什么,所以我不知道它应该如何。

2

我有同样的问题

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    CalendarsData c = (CalendarsData) this.getItem(position); 

    if (convertView == null) { 
     holder=new ViewHolder(); 
     convertView = l_Inflater.inflate(R.layout.preference_list_element, null); 

     holder.text=(CheckBox)convertView.findViewById(R.id.checkTextView);   
     //holder.tv =(TextView)convertView.findViewById(R.id.textview); 

     holder.text.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       CheckBox cb = (CheckBox) v; 
       CalendarsData ssi = (CalendarsData) cb.getTag(); 
       ssi.setChecked(cb.isChecked()); 
      } 
     });    

     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

holder.text.setText("c.anyvalue"); 
return convertView; 
}    

像上面的家伙说,你需要的东西:

} else { 
     holder = (ViewHolder) convertView.getTag(); 
+0

如果你有解决然后发布我有同样的问题。 – PankajAndroid 2013-10-18 12:06:16

+0

@PankajAndroid还需要帮助吗? – oxbox 2014-03-16 19:15:40

+0

@oxboy不,谢谢我解决了它 – PankajAndroid 2014-03-18 04:25:36

相关问题