You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为RecyclerView商品添加操作实现工作线程优化?

Android应用主线程卡顿问题与工作线程优化方案需求

应用结构概述

  • 包含2个Activity:主界面Activity、商店界面Activity
  • 商店界面Activity包含2个Fragment,其中第一个Fragment内有两个RecyclerView:
    • 购物车(初始为空):对应集合spritesSelected
    • 食品列表(固定长度):对应集合spritesList

用户操作流程

  • 点击添加食品按钮:弹出包含食品列表RecyclerView的Dialog
  • 点击食品列表项:弹出数量输入Dialog
  • 输入数量并确认:更新购物车RecyclerView,添加对应食品

当前问题

整个操作流程均在主线程执行,导致耗时较长。尝试为整个流程分配线程,但未提升运行速度,寻求最优工作线程实现方案。

食品列表RecyclerView适配器中食品项点击事件代码

imageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (spriteSelectedRVAInterface1 != null){
            int position = getAdapterPosition();
            if (position != RecyclerView.NO_POSITION){
                Sprite s = spritesSelected.get(position);
                s.setVisibility(!s.visibility);
                spriteSelectedRVAInterface1.onItemClicked(position);
            }
        }
    }
});

Fragment中实现的接口方法(重写onItemViewClicked)

@Override
public void onItemViewClicked(Sprite sprite, Context context) {
    spriteAddDialog = new Dialog(context);
    spriteAddDialog.setContentView(R.layout.sprite_add_menu);
    spriteAddDialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

    ImageButton close = spriteAddDialog.findViewById(R.id.ib_close);
    EditText enter_amount = spriteAddDialog.findViewById(R.id.edt_enter_amount);
    Button add = spriteAddDialog.findViewById(R.id.b_add);

    enter_amount.setText(String.valueOf(sprite.defaultAmount));

    close.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            spriteAddDialog.dismiss();
        }
    });

    add.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            int amountEntered = Integer.parseInt(enter_amount.getText().toString());
            int amountPresent = 0;
            
            try {
                amountPresent =  spritesSelectedAmount.get(spritesSelected.indexOf(sprite));
            } catch (Exception IndexOutOfBoundsException){
                //do nothing
            }
            
            if (amountEntered + amountPresent  > sprite.maxAmountSelected){
                Toast.makeText(context, "Exceeded maximum limit of " + sprite.maxAmountSelected + " items.",
                Toast.LENGTH_LONG).show();
            } else {
                spriteAddDialog.dismiss();
                spriteListDialog.dismiss();
                onAddButtonClick(sprite, amountEntered);
            }
        }
    });

    spriteAddDialog.show();
}

onAddButtonClick方法代码

public int onAddButtonClick(Sprite s, int amount) {
    if (spritesSelected.size() != 0) {
        for (Sprite sprite : spritesSelected) {
            if (s == sprite) {
                int i = spritesSelected.indexOf(sprite);
                spritesSelectedAmount.set(i, spritesSelectedAmount.get(i) + amount);
                rva2.notifyItemChanged(i);
                return -1;
            }
        }
    }
    spritesSelected.add(s);
    spritesSelectedAmount.add(amount);
    rva2.notifyItemInserted(spritesSelected.size()-1);
    return 1;
}

内容的提问来源于stack exchange,提问作者Soil Milk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:02:01