Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 回收器视图列表变得混乱_Android_Android Recyclerview - Fatal编程技术网

Android 回收器视图列表变得混乱

Android 回收器视图列表变得混乱,android,android-recyclerview,Android,Android Recyclerview,我正在使用recycler视图填充数组列表 public class Recycleradapter extends RecyclerView.Adapter<Recycleradapter.ViewHolder> { private ArrayList<Merchant> mDataset = new ArrayList<>(); private Context mContext; private Handler mHandler; private int

我正在使用recycler视图填充数组列表

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;
    }
}
}
公共类Recycleradapter扩展了RecyclerView.Adapter{ private ArrayList mDataset=new ArrayList(); 私有上下文; 私人经理人; private int lastPosition=-1; 私有处理器callHandler; 公共Recycleradapter(ArrayList列表、上下文上下文、处理程序、处理程序调用处理程序) { mContext=上下文; mHandler=handler; mDataset=列表; this.callHandler=callHandler; } @凌驾 public ViewHolder onCreateViewHolder(视图组父级,int-viewType){ 视图v=LayoutInflater.from(parent.getContext()) .充气(R.layout.merchantcard,父项,错误); 视窗夹持器视窗夹持器=新视窗夹持器(v); 返回视图持有者; } @凌驾 公共无效onBindViewHolder(ViewHolder,最终int位置){ 商户=新商户(); 商户=mDataset.get(位置); holder.MerchantName.setText(merchant.MerchantName); 持有人地址setText(商户地址1); if(商户距离!=null) { 如果(商户距离>1000) { 商户距离=商户距离/1000; holder.Distance.setText(新的十进制格式(“##########”)格式(商户距离)+“公里”); }否则 { holder.Distance.setText(新的十进制格式(“###.#####”)格式(merchant.Distance)+“m”); } } holder.cardView.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图v){ Message Message=mHandler.obtainMessage(); Bundle b=新Bundle(); b、 putInt(“pos”,位置); 消息。设置数据(b); message.sendToTarget(); } }); } @凌驾 public int getItemCount(){ 返回mDataset.size(); } 公共静态类ViewHolder扩展了RecyclerView.ViewHolder{ 公共静态文本查看商品名称、地址、距离; 公共静态CardView CardView; 公共静态图像视图调用; 公共视图持有者(视图项视图){ 超级(项目视图); MerchantName=(TextView)itemView.findViewById(R.id.MerchantName); 地址=(TextView)itemView.findViewById(R.id.MerchantAddressline1); cardView=(cardView)itemView.findViewById(R.id.MerchantCard); call=(ImageView)itemviewbyd(R.id.merchant\u call); 距离=(TextView)itemView.findViewById(R.id.Distance\u商户卡); } } 私有void setAnimation(视图视图到动画,int位置) { //如果绑定视图以前未显示在屏幕上,则会设置动画 如果(位置>最后位置) { Animation Animation=AnimationUtils.loadAnimation(mContext,android.R.anim.slide\u在左侧); viewToAnimate.startAnimation(动画); 最后位置=位置; } } } 当我滚动到列表的底部时,当我滚动回到顶部时,我的顺序会发生变化,有时甚至同一个项目会多次显示

如何解决这个问题


谢谢

删除
静态
关键字出现在
视图持有者
类中的所有位置。您需要每个
ViewHolder
来管理
RecyclerView
中单个项目的视图。目前,使用
static
,您有多个
ViewHolder
实例都使用相同的视图。

删除
static
关键字,它出现在
ViewHolder
类中的任何地方。您需要每个
ViewHolder
来管理
RecyclerView
中单个项目的视图。目前,使用
static
,您有多个
ViewHolder
实例都使用相同的视图。

删除
static
关键字,它出现在
ViewHolder
类中的任何地方。您需要每个
ViewHolder
来管理
RecyclerView
中单个项目的视图。目前,使用
static
,您有多个
ViewHolder
实例都使用相同的视图。

删除
static
关键字,它出现在
ViewHolder
类中的任何地方。您需要每个
ViewHolder
来管理
RecyclerView
中单个项目的视图。目前,使用
static
,您有几个
ViewHolder
实例都使用相同的视图。

而不是使用

merchant= mDataset.get(position);
你应该使用

merchant= mDataset.get(holder.getAdapterPosition());
并根据绑定时的代码从位置中删除最后一个关键字。它修复了位置,回收器视图与视图保持器一起工作。

而不是使用

merchant= mDataset.get(position);
你应该使用

merchant= mDataset.get(holder.getAdapterPosition());
并根据绑定时的代码从位置中删除最后一个关键字。它修复了位置,回收器视图与视图保持器一起工作。

而不是使用

merchant= mDataset.get(position);
你应该使用

merchant= mDataset.get(holder.getAdapterPosition());
并根据绑定时的代码从位置中删除最后一个关键字。它修复了位置,回收器视图与视图保持器一起工作。

而不是使用

merchant= mDataset.get(position);
你应该使用

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

并根据绑定时的代码从位置中删除最后一个关键字。它修复了位置,回收器视图与视图保持器一起工作。

非常感谢我了解问题现在工作正常@commonwarethanks非常了解问题现在工作正常@commonwarethanks非常了解问题现在工作正常@CommonwareThanks很多我理解这个问题现在在commonware中运行良好