如何解决分页时在 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
这是在滚动到下一页之后
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。