2016-05-04 5 views
1

Was ist falsch mit diesem Adapter, wenn ich nach unten scrollen sehe ich wiederholte Reihen an der Unterseite und dann beim Scrollen wieder sehe ich auch wiederholte Reihen an der Spitze, die vorher nicht existierten, und den Rest von Data Artikel erscheint nichtListView Custom Adapter wiederholen Artikel

den Adapter:

public class ClassesListViewAdapter extends BaseAdapter { 
    private Context mContext; 
    ArrayList<String> Data = new ArrayList<>(); 


    public ClassesListViewAdapter(Context context, ArrayList<String> data) { 
     Data = data; 
     mContext = context; 
    } 

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

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

    @Override 
    public int getCount() { 
     return Data.size(); 
    } 
    private class ViewHolder{ 

     TextView ClassDataTV; 

    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = ((Activity)mContext).getLayoutInflater(); 
     ViewHolder holder; 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.classes_list_view_item, parent, false); 
      holder = new ViewHolder(); 
      holder.ClassDataTV = (TextView) convertView.findViewById(R.id.ClassDataTV); 
      holder.ClassDataTV.setText(Data.get(position)); 
      convertView.setTag(holder); 
     }else{ 
      holder=(ViewHolder)convertView.getTag(); 
     } 

     return convertView; 
    } 
} 

und hier, wie ich es verwenden:

ArrayList<String> v = new ArrayList<>(); 
    v.add("AAAAAAA"); 
    v.add("WWWWWwW"); 
    v.add("VVVVVVV"); 
    v.add("SSSSSSSSS"); 
    v.add("QQQQQQQQQ"); 
    v.add("YYYYYYYY"); 
    v.add("TTTTTTT"); 
    v.add("UUUUUUUUUU"); 
    v.add("zzzzzzzzzzzz"); 
    v.add("CCCCCCCCCC"); 
    v.add("HHHHHHHHHHH"); 
    v.add("IIIIIIIIII"); 
    v.add("PPPPPPPPP"); 
    mListView.setAdapter(new ClassesListViewAdapter(getActivity(), v)); 
+0

Haben Sie die Sichtbarkeit in Ihrem Adapter geändert? – Amir

+0

Das gleiche ist mir passiert, aber meine Artikel wiederholt sich in regelmäßigen Abständen wie: A, B, C, D, A, B, C, D und so weiter. Ich habe es mit einer Lösung, die ich hier auf StackOverflow gefunden habe, behoben. – Vucko

+0

@Vucko, Link funktioniert nicht –

Antwort

3

Put des Codes außerhalb if-Block folgenden Teil und es wird festgelegt:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = ((Activity)mContext).getLayoutInflater(); 
     ViewHolder holder; 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.classes_list_view_item, parent, false); 
      holder = new ViewHolder(); 
      holder.ClassDataTV = (TextView) convertView.findViewById(R.id.ClassDataTV); 

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

     // initialize your view here 
     holder.ClassDataTV.setText(Data.get(position)); 
     return convertView; 
    } 

Die Logik hinter ViewHolder Muster sagt, dass Sie es auf diese Weise tun sollten. Wenn Sie einen Teil der Referenz scrollen wird nicht wieder erstellt und aufgerufen, so dass dies Ihre Liste nicht aktualisiert, wie Sie erwartet haben.

+2

Während das stimmt, sollten Sie auch erklären, warum. – cyroxis

+1

Ja, es funktionierte perfekt –

+1

[This] (http://stackoverflow.com/questions/23995052/repeating-items-in-listview) ist auf Ihr Problem und [die ausgewählte Antwort] (http://stackoverflow.com/questions/23995052/repeating-items-in-listview) kann einige mögen. – ishmaelMakitla