2015-10-26 141 views
0

我使用回收视图来填充数组列表,回收站视图列表被混乱

public class Recycleradapter extends RecyclerView.Adapter<Recycleradapter.ViewHolder> { 
private ArrayList<Merchant> mDataset = new ArrayList<>(); 
private Context mContext; 
private Handler mHandler; 
private int lastPosition = -1; 
private Handler callHandler; 
public Recycleradapter(ArrayList<Merchant> list,Context context,Handler handler,Handler callHandler) 
{ 
    mContext = context; 
    mHandler = handler; 
    mDataset = list; 
    this.callHandler = callHandler; 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.merchantcard, parent, false); 
    ViewHolder viewHolder = new ViewHolder(v); 
    return viewHolder; 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, final int position) { 
    Merchant merchant = new Merchant(); 
    merchant= mDataset.get(position); 
    holder.MerchantName.setText(merchant.MerchantName); 
    holder.Address.setText(merchant.Address1); 
    if(merchant.Distance!= null) 
    { 
     if(merchant.Distance>1000) 
     { 
      merchant.Distance= merchant.Distance/1000; 
      holder.Distance.setText(new DecimalFormat("##.##").format(merchant.Distance)+" km"); 
     }else 
     { 
      holder.Distance.setText(new DecimalFormat("##.##").format(merchant.Distance)+" m"); 
     } 
    } 


    holder.cardView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Message message = mHandler.obtainMessage(); 
      Bundle b = new Bundle(); 
      b.putInt("pos", position); 
      message.setData(b); 
      message.sendToTarget(); 
     } 
    }); 


} 

@Override 
public int getItemCount() { 
    return mDataset.size(); 
} 

public static class ViewHolder extends RecyclerView.ViewHolder { 
public static TextView MerchantName,Address,Distance; 
    public static CardView cardView; 
    public static ImageView call; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     MerchantName = (TextView)itemView.findViewById(R.id.MerchantName); 
     Address = (TextView)itemView.findViewById(R.id.MerchantAddressline1); 
     cardView = (CardView)itemView.findViewById(R.id.MerchantCard); 
     call =(ImageView)itemView.findViewById(R.id.merchant_call); 
     Distance= (TextView)itemView.findViewById(R.id.distance_merchant_card); 


    } 
} 
private void setAnimation(View viewToAnimate, int position) 
{ 
    // If the bound view wasn't previously displayed on screen, it's animated 
    if (position > lastPosition) 
    { 
     Animation animation = AnimationUtils.loadAnimation(mContext, android.R.anim.slide_in_left); 
     viewToAnimate.startAnimation(animation); 
     lastPosition = position; 
    } 
} 
} 

当我滚动到列表我的订单得到改变的底部。当我向后滚动到顶部,有的时候甚至是同一项目获取显示多次

如何解决这个问题

感谢

回答

2

删除关键字static它出现在你的无处不在班。您需要每个ViewHolder来管理RecyclerView中单个项目的视图。现在,使用static,你有几个ViewHolder实例工作在相同的意见。

+0

非常感谢我明白了这个问题现在工作Fine @ CommonsWare – Pragadees

1

而不是使用

merchant= mDataset.get(position); 

,你应该根据你的代码上结合其固定的位置和回收视图适用于查看持有者使用

merchant= mDataset.get(holder.getAdapterPosition()); 

,并从位置删除final关键字。