微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

分页时在 recyclerView 切换语句行为

如何解决分页时在 recyclerView 切换语句行为

**我正在开发一个市场应用程序,在订单历史活动中,我必须检查订单状态,因此在我的适配器上我做了一个 switch 语句来处理它,它运行良好 但是当我向下滚动并调用第二页并且适配器列表更新所有状态更改时** 这是我的适配器

public class OrdersAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int ITEM = 0;
private static final int LOADING = 1;
Context context;
List<Orders> ordersList = new ArrayList<>();
private boolean isLoaderVisible = false;
public int selectedPosition;
IClickRecyclerAdapter clickListener;


public OrdersAdapter(Context context,List<Orders> ordersList) {
    this.context = context;
    if (ordersList != null)
        this.ordersList = new ArrayList<>(ordersList);
    selectedPosition = -1;

}

public void setClickListener(IClickRecyclerAdapter clickListener) {
    this.clickListener = clickListener;
}

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
    RecyclerView.ViewHolder viewHolder = null;
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());

    switch (viewType) {
        case ITEM:
            viewHolder = getViewHolder(parent,inflater);
            break;
        case LOADING:
            View v2 = inflater.inflate(R.layout.item_loading,parent,false);
            viewHolder = new LoadingVH(v2);
            break;
    }
    return viewHolder;
}

@NonNull
private RecyclerView.ViewHolder getViewHolder(ViewGroup parent,LayoutInflater inflater) {
    RecyclerView.ViewHolder viewHolder;
    ItemOrderModefiedBinding binding = ItemOrderModefiedBinding.inflate(LayoutInflater.from(parent.getContext()),false);
    viewHolder = new MainViewHolder(binding);
    return viewHolder;
}

@SuppressLint("UseCompatLoadingForDrawables")
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder,int position) {
    Orders orders = ordersList.get(position);


    switch (getItemViewType(position)) {
        case ITEM:
            OrdersAdapter.MainViewHolder mainViewHolder = (OrdersAdapter.MainViewHolder) holder;
            if (orders.getStatus() != null) {
                mainViewHolder.binding.orderId.setText(orders.getId().toString());


                String givendateString = orders.getCreatedAt();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

                try {
                    Date mDate = sdf.parse(givendateString);
                    long timeInMilliseconds = mDate.getTime();
                    long Now = System.currentTimeMillis();
                    CharSequence ago =
                            DateUtils.getRelativeTimeSpanString(timeInMilliseconds,Now,DateUtils.MINUTE_IN_MILLIS);
                    mainViewHolder.binding.date.setText(ago);

                } catch (ParseException e) {

                    e.printstacktrace();
                }


                switch (orders.getStatus()) {

                    case "request":
                        mainViewHolder.binding.line1.setBackgroundColor(context.getColor(R.color.grayModefied));
                        mainViewHolder.binding.line2.setBackgroundColor(context.getColor(R.color.grayModefied));
                        mainViewHolder.binding.line3.setBackgroundColor(context.getColor(R.color.grayModefied));
                        mainViewHolder.binding.requestedText.setVisibility(View.VISIBLE);
                        mainViewHolder.binding.step1Circle.setBackground(context.getDrawable(R.drawable.purple_circle));
                        mainViewHolder.binding.step2Circle.setBackground(context.getDrawable(R.drawable.gray_circle));
                        mainViewHolder.binding.step3Circle.setBackground(context.getDrawable(R.drawable.gray_circle));
                        mainViewHolder.binding.step4Circle.setBackground(context.getDrawable(R.drawable.gray_circle));

                        break;
                    case "approve":
                        mainViewHolder.binding.line1.setProgress(100,true);
                        mainViewHolder.binding.line1.setBackgroundColor(context.getColor(R.color.greencolor));
                        mainViewHolder.binding.line2.setBackgroundColor(context.getColor(R.color.grayModefied));
                        mainViewHolder.binding.line3.setBackgroundColor(context.getColor(R.color.grayModefied));
                        mainViewHolder.binding.step1Circle.setBackground(context.getDrawable(R.drawable.green_circle));
                        mainViewHolder.binding.step2Circle.setBackground(context.getDrawable(R.drawable.green_circle));
                        mainViewHolder.binding.step3Circle.setBackground(context.getDrawable(R.drawable.gray_circle));
                        mainViewHolder.binding.step4Circle.setBackground(context.getDrawable(R.drawable.gray_circle));
                        mainViewHolder.binding.approvedText.setVisibility(View.VISIBLE);

                        break;
                    case "shipping":
                        mainViewHolder.binding.line1.setProgress(100,true);
                        mainViewHolder.binding.line1.setIndicatorColor(context.getColor(R.color.orange));
                        mainViewHolder.binding.line1.postOnAnimationDelayed(() -> {
                            mainViewHolder.binding.line2.setProgress(100,true);
                            mainViewHolder.binding.line2.setIndicatorColor(context.getColor(R.color.orange));
                        },900);
                        mainViewHolder.binding.step1Circle.setBackground(context.getDrawable(R.drawable.orange_circle));
                        mainViewHolder.binding.step2Circle.setBackground(context.getDrawable(R.drawable.orange_circle));
                        mainViewHolder.binding.step3Circle.setBackground(context.getDrawable(R.drawable.orange_circle));
                        mainViewHolder.binding.step4Circle.setBackground(context.getDrawable(R.drawable.gray_circle));
                        mainViewHolder.binding.shippingText.setVisibility(View.VISIBLE);
                        break;
                    case "deliver":
                        mainViewHolder.binding.line1.setProgress(100,true);
                        mainViewHolder.binding.line1.setIndicatorColor(context.getColor(R.color.greencolor));
                        mainViewHolder.binding.line1.postOnAnimationDelayed(() -> {
                            mainViewHolder.binding.line2.setProgress(100,true);
                            mainViewHolder.binding.line2.setIndicatorColor(context.getColor(R.color.greencolor));
                        },900);

                        mainViewHolder.binding.line2.postOnAnimationDelayed(() -> {
                            mainViewHolder.binding.line3.setProgress(100,true);
                            mainViewHolder.binding.line3.setIndicatorColor(context.getColor(R.color.greencolor));
                        },1800);

                        mainViewHolder.binding.step1Circle.setBackground(context.getDrawable(R.drawable.green_circle));
                        mainViewHolder.binding.step2Circle.setBackground(context.getDrawable(R.drawable.green_circle));
                        mainViewHolder.binding.step3Circle.setBackground(context.getDrawable(R.drawable.green_circle));
                        mainViewHolder.binding.step4Circle.setBackground(context.getDrawable(R.drawable.green_circle));
                        mainViewHolder.binding.deliveredText.setVisibility(View.VISIBLE);
                        break;
                    case "cancel":
                        mainViewHolder.binding.line1.setProgress(100,true);
                        mainViewHolder.binding.line1.setIndicatorColor(context.getColor(R.color.redcolor));
                        mainViewHolder.binding.line1.postOnAnimationDelayed(() -> {
                            mainViewHolder.binding.line2.setProgress(100,true);
                            mainViewHolder.binding.line2.setIndicatorColor(context.getColor(R.color.redcolor));
                        },true);
                            mainViewHolder.binding.line3.setIndicatorColor(context.getColor(R.color.redcolor));
                        },1800);

                        mainViewHolder.binding.step1Circle.setBackground(context.getDrawable(R.drawable.red_circle));
                        mainViewHolder.binding.step2Circle.setBackground(context.getDrawable(R.drawable.red_circle));
                        mainViewHolder.binding.step3Circle.setBackground(context.getDrawable(R.drawable.red_circle));
                        mainViewHolder.binding.step4Circle.setBackground(context.getDrawable(R.drawable.red_circle));
                        mainViewHolder.binding.deliveredText.setVisibility(View.VISIBLE);
                        mainViewHolder.binding.deliveredText.setText(R.string.cancel);
                        break;

                }

            }

            if (clickListener != null) {
                holder.itemView.setonClickListener(view -> {
                    if (selectedPosition != position) {
                        if (clickListener != null) {
                            clickListener.onClickAdapter(position);
                        }
                    }
                });
            }
            break;
        case LOADING:
            break;
    }
}

@Override
public int getItemCount() {
    return ordersList != null ? ordersList.size() : 0;
}

protected class MainViewHolder extends RecyclerView.ViewHolder {

    ItemOrderModefiedBinding binding;

    public MainViewHolder(@NonNull ItemOrderModefiedBinding itemView) {
        super(itemView.getRoot());
        binding = itemView;
    }

}

protected class LoadingVH extends RecyclerView.ViewHolder {

    public LoadingVH(View itemView) {
        super(itemView);
    }
}
public Orders getorders(int position) {
    return ordersList.get(position);
}


public void addItems(List<Orders> orders) {
    this.ordersList.addAll(orders);
    notifyDataSetChanged();
}


@Override
public int getItemViewType(int position) {

        return (position == ordersList.size() - 1 && isLoaderVisible)? LOADING : ITEM;
}

//-----------------------------
public void add(Orders orders) {
    ordersList.add(orders);
    notifyItemInserted(ordersList.size() - 1);
}

public void addAll(List<Orders> mcList) {
    for (Orders mc: mcList) {
        add(mc);
    }
}

public void remove(Orders orders) {
    int position = ordersList.indexOf(orders);
    if (position > -1) {
        ordersList.remove(position);
        notifyItemRemoved(position);
    }
}

public void clear() {
    isLoaderVisible = false;
    ordersList.clear();
    while (getItemCount() > 0) {
        remove(getItem(0));
        notifyDataSetChanged();
    }
    notifyDataSetChanged();

}

public boolean isEmpty() {
    return getItemCount() == 0;
}

public void addLoadingFooter() {
    isLoaderVisible = true;
    add(new Orders());
}

public void removeLoadingFooter() {
    isLoaderVisible = false;

    int position = ordersList.size() - 1;
    Orders item = getItem(position);
    if (item != null) {
        ordersList.remove(position);
        notifyItemRemoved(position);
        notifyItemRangeChanged(position,ordersList.size());
    }
}

public Orders getItem(int position) {
    return ordersList.get(position);
}

}

这是我的片段

 public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
    // Inflate the layout for this fragment

    binding = FragmentAllOrdersBinding.inflate(inflater,container,false);
    View view = binding.getRoot();

    binding.ordersRecyclerView.setVisibility(View.GONE);
    binding.progressLoadingData.setVisibility(View.VISIBLE);
    ordersviewmodel = new viewmodelProvider(this).get(Ordersviewmodel.class);
    adapter = new OrdersAdapter(context,null);

    linearlayoutmanager = new linearlayoutmanager(context,RecyclerView.VERTICAL,false);
    binding.ordersRecyclerView.addOnScrollListener(new PaginationListener(linearlayoutmanager) {
        @Override
        protected void loadMoreItems() {
            isLoading = true;
            currentPage += 1;
            if (currentPage <= TOTAL_PAGES) {
                adapter.addLoadingFooter();
                Log.d("TTTT","loadMoreItems: " + currentPage + "  " + TOTAL_PAGES);
                new Handler().postDelayed(() -> loadNextPage(),500);

            } else {
                isLastPage = true;
            }
        }

        @Override
        protected int getTotalPages() {
            return TOTAL_PAGES;
        }

        @Override
        public boolean isLastPage() {
            return isLastPage;
        }

        @Override
        public boolean isLoading() {
            return isLoading;
        }
    });
    new Handler().postDelayed(this::loadFirsPage,500);


    binding.ordersRecyclerView.setLayoutManager(linearlayoutmanager);

    binding.ordersRecyclerView.setAdapter(adapter);

    adapter.setClickListener(position -> {
        Orders orders = adapter.getItem(position);

        Intent intent = new Intent(context,SingleOrderActivity.class);
        intent.putExtra(Constant.EXTRA_ORDER_ID,orders.getId());
        startActivity(intent);

    });

    return view;
}

private void loadFirsPage() {
    ordersviewmodel.getCurrentOrders(currentPage);


    ordersviewmodel.ordersmutablelivedata.observe(this,orders -> {
        binding.progressLoadingData.setVisibility(View.GONE);
        if (orders.getStatus().equalsIgnoreCase("success")) {
            if(isLoading){
                adapter.removeLoadingFooter();
                isLoading = false;
            }
            if (orders.getData().getData().isEmpty()) {
                binding.emptyState.setVisibility(View.VISIBLE);

            } else {
                binding.ordersRecyclerView.setVisibility(View.VISIBLE);
            }
            adapter.addItems(orders.getData().getData());
            TOTAL_PAGES = orders.getData().getLastPage();

            if (currentPage != TOTAL_PAGES) {
            } else {
                if (orders.getData().getLastPage() != 1) {
                    isLastPage = true;
                }
            }
        }
    });
}

private void loadNextPage() {
    ordersviewmodel.getCurrentOrders(currentPage);


}

和这个屏幕在第一次通话时拍摄 first image

这是在滚动到下一页之后

second image

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?