2016-04-24 4 views
0

Meine Frage ist: wenn ich meine Seite scrollen, werden einige Ansichten an einem neuen Ort angezeigt, nicht alle meine Inhalte aus dem Adapter werden angezeigt, aber nur eine Art von ihnen. unten ist meine Adapterklasse:Wie zu stoppen meine RecyclerView die Ansicht wiederverwenden

import android.support.v7.widget.RecyclerView; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 
import java.util.List; 

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> { 

private List<BabyFigure> rinfoList ; 


public class MyViewHolder extends RecyclerView.ViewHolder { 
    public TextView id,date,time,type,quantity,demo; 

    public MyViewHolder(View view) { 
     super(view); 
     id = (TextView) view.findViewById(R.id.recycle_view_id); 
     date = (TextView) view.findViewById(R.id.recycle_view_date); 
     time = (TextView) view.findViewById(R.id.recycle_view_time); 
     type = (TextView) view.findViewById(R.id.recycle_view_type); 
     quantity = (TextView) view.findViewById(R.id.recycle_view_quantity); 
     demo = (TextView) view.findViewById(R.id.recycle_view_demo); 
    } 
} 

public RecyclerViewAdapter(List<BabyFigure> infoList) { 
    this.rinfoList = infoList; 
    setHasStableIds(true); 
} 

@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_content, 
      parent,false); 
    return new MyViewHolder(itemView); 
} 

@Override 
public int getItemCount() { 
    Log.d(getClass().getSimpleName(),String.valueOf(rinfoList.size())); 
    return rinfoList.size(); 
} 

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

@Override 
public void onBindViewHolder(MyViewHolder holder,int position) { 
    BabyFigure babyFigure = rinfoList.get(position); 
    holder.quantity.setText(String.valueOf(babyFigure.getQuantity())); 
    holder.id.setText(String.valueOf(babyFigure.getId())); 
    holder.demo.setText(babyFigure.getDemo()); 
    holder.date.setText(babyFigure.getDate()); 
    holder.time.setText(babyFigure.getTime()); 
    holder.type.setText(babyFigure.getType()); 
} 

}

Vielen Dank

Antwort

3

Das Problem ist, dass Sie nicht getItemId() umgesetzt haben. Sie rufen die Superklassenimplementierung auf, die für alle Positionen einfach denselben Wert zurückgibt.

Am allerwenigsten, Sie können dies tun:

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

Aber wenn Ihre Datenelemente tatsächlich sinnvoll IDs haben, sollten Sie die ID des Elements statt zurückzukehren.

@Override 
public long getItemId(int position) { 
    return rinfoList.get(position).getId(); 
} 
+0

Tat overrode ich die GetItemID Methode, aber ich benutze "return super.getItemID (Position)" statt. Wie auch immer, ich folge deinem Rat, und es funktioniert, vielen Dank –

+0

Es funktioniert nicht für mich ... kannst du mir bitte helfen, getItem ID zu setzen? Ich benutze ArrayList , weil ich nicht in der Lage bin, ID –

+0

@JadavLalit Idealerweise sollten Sie etwas aussagekräftiger und spezifischer als 'Objekt' verwenden, um Ihre Artikel zu repräsentieren. Die ID ist ein logischer Wert, der ein bestimmtes Element eindeutig identifiziert. Was das für Ihren spezifischen Anwendungsfall bedeutet, bestimmen und implementieren Sie. – Karakuri

Verwandte Themen