Android:从回收器适配器更改购物车菜单徽章计数器

2023-12-21

我正在尝试开发电子商务类型的应用程序,用户可以在其中将商品添加到购物车。但我无法从适配器更新购物车徽章计数器。 这是我的应用程序的屏幕截图。

我正在片段内使用回收器视图。我在下面引用了这个链接来了解菜单项的数量。

https://mobikul.com/adding-badge-count-on-menu-items-like-cart-notification-etc/ https://mobikul.com/adding-badge-count-on-menu-items-like-cart-notification-etc/

我的问题是我无法从适配器访问菜单项。

这是我的片段代码。

PriceListFragment.java

public class PriceListFragment extends Fragment {

    public ArrayList<Design> designList;
    private Single_DesignAdapter adapter;
    private RecyclerView recyclerView;

    public PriceListFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, final ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        setHasOptionsMenu(true);
        View v = inflater.inflate(R.layout.fragment_price_list, container, false);

        recyclerView = (RecyclerView)v.findViewById(R.id.pl_recycler_view);

        designList = new ArrayList<Design>();

        designList = list();

        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        recyclerView.setHasFixedSize(true);
        adapter = new Single_DesignAdapter(getContext(), designList);
        recyclerView.setAdapter(adapter);

        return v;
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.cart_menu, menu);
        super.onCreateOptionsMenu(menu, inflater);

        MenuItem itemCart = menu.findItem(R.id.menu_cart);
        LayerDrawable icon = (LayerDrawable) itemCart.getIcon();
        setBadgeCount(getContext(), icon, 0);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

            case R.id.menu_cart:
                Toast.makeText(getActivity(), "cart", Toast.LENGTH_SHORT). show();
                return false;


            default:
                break;
        }
        return false;

    }

    public ArrayList<Design> list() {
        ArrayList<Design> arrayList = new ArrayList<Design>();

        Design design = new Design();
        design.name = "Black";
        design.image = "http://website/Demo/images/1.jpg";
        design.designName = "11001";
        design.qualityName = "Cotton";
        design.amount = "1000";
        design.discPercent = "5";

        Design design2 = new Design();
        design2.name = "Green";
        design2.image = "http://website/Demo/images/2.jpg";
        design2.designName = "11001";
        design2.qualityName = "Cotton";
        design2.amount = "900";
        design2.discPercent = "9";

        arrayList.add(design);
        arrayList.add(design2);

        return arrayList;
    }

    public static void setBadgeCount(Context context, LayerDrawable icon, int count) {

        BadgeDrawable badge;

        // Reuse drawable if possible
        Drawable reuse = icon.findDrawableByLayerId(R.id.ic_badge);
        if (reuse != null && reuse instanceof BadgeDrawable) {
            badge = (BadgeDrawable) reuse;
        } else {
            badge = new BadgeDrawable(context);
        }

        badge.setCount(count);
        icon.mutate();
        icon.setDrawableByLayerId(R.id.ic_badge, badge);
    }
}

设计是我的典范课

设计.java

public class Design implements Serializable{

    public String id;
    public String qualityId;
    public String qualityName;
    public String designId;
    public String designName;
    public String image;
    public String name; //use as shade name
    public String discPercent;
    public String amount;
    public String pcs;
    public String qty;
}

Single_DesignAdapter.java

public class Single_DesignAdapter extends RecyclerView.Adapter<Single_DesignAdapter.ViewHolder> {

    public ArrayList<Design> designList;
    private Context context;
    private LayoutInflater layoutInflater;

    public Single_DesignAdapter(Context context, ArrayList<Design> designList) {
        this.designList = designList;
        this.context = context;
        this.layoutInflater = LayoutInflater.from(context);
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = layoutInflater.inflate(R.layout.single_design, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {

        Design design = designList.get(position);
        holder.tvQuality.setText(design.qualityName);
        holder.tvDesign.setText(design.designName);
        holder.tvShade.setText(design.name);
        if (!design.discPercent.equals("0")) {
            holder.tvDisPer.setText("-"+design.discPercent+"%");
            holder.tvAmount.setPaintFlags(holder.tvAmount.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
            int a = Integer.parseInt(design.amount);
            float b = Float.parseFloat(design.discPercent) / 100;
            holder.tvAmount.setText("₹ " + design.amount);
            int c = (int) (a * b);
            int d = a-c;
            holder.tvDiscAmt.setText("₹ " +d);
            Picasso.with(context).load(design.image).into(holder.ivDesign);
        } else {
            holder.tvAmount.setText("₹ " + design.amount);
            Picasso.with(context).load(design.image).into(holder.ivDesign);
            holder.tvDisPer.setVisibility(View.INVISIBLE);
            holder.tvDiscAmt.setVisibility(View.INVISIBLE);
        }

        holder.btAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                holder.llAdd.setVisibility(View.GONE);
                holder.llPlusMinus.setVisibility(View.VISIBLE);
            }
        });

        holder.btPlus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (Integer.parseInt(holder.btPcsCount.getText().toString()) >= 1) {
                    int a = Integer.parseInt(holder.btPcsCount.getText().toString());
                    int x = a++;
                    holder.btPcsCount.setText(Integer.toString(a));
                }
            }
        });

        holder.btMinus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (Integer.parseInt(holder.btPcsCount.getText().toString()) <= 1) {
                    holder.llAdd.setVisibility(View.VISIBLE);
                    holder.llPlusMinus.setVisibility(View.GONE);
                } else {
                    int a = Integer.parseInt(holder.btPcsCount.getText().toString());
                    a--;
                    holder.btPcsCount.setText(Integer.toString(a));
                }
            }
        });

    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {

        public LinearLayout llPer, llAdd, llPlusMinus;
        public Button btPlus, btMinus, btPcsCount, btAdd;
        public ImageView ivDesign;
        public TextView tvDesign, tvQuality, tvShade, tvAmount, tvDiscAmt, tvDisPer;

        public ViewHolder(View itemView) {
            super(itemView);

            btPlus = (Button) itemView.findViewById(R.id.btPlus);
            //other find view by ids
        }
    }
}

现在,当用户将商品添加到购物车时,它应该增加计数器。我将添加每个购物车项目ArrayList<Design>然后我会将此列表保存到共享首选项中。我将管理一切,但我无法理解如何从适配器更新购物车计数器。我无法访问适配器中的菜单。如果还有其他方法可以做到这一点,请帮忙。


在您的片段点击事件中:

((MainActivity) getActivity()).createCartBadge("value");

您的活动包含此方法:

public void createCartBadge(int i) {
        MenuItem cartItem = mToolbarMenu.findItem(R.id.cart);
        LayerDrawable localLayerDrawable = (LayerDrawable) cartItem.getIcon();
        Drawable cartBadgeDrawable = localLayerDrawable
                .findDrawableByLayerId(R.id.ic_badge);
        BadgeDrawable badgeDrawable;
        if ((cartBadgeDrawable != null)
                && ((cartBadgeDrawable instanceof BadgeDrawable))
                && (i < 10)) {
            badgeDrawable = (BadgeDrawable) cartBadgeDrawable;
        } else {
            badgeDrawable = new BadgeDrawable(MainActivity.this);
        }
        badgeDrawable.setCount(i);
        localLayerDrawable.mutate();
        localLayerDrawable.setDrawableByLayerId(R.id.ic_badge, badgeDrawable);
        cartItem.setIcon(localLayerDrawable);
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:从回收器适配器更改购物车菜单徽章计数器 的相关文章

  • 使用 JSONArray 还是普通数组来存储/读取数据更有效?

    我正在使用一个连接到PHP MySQL返回所有内容的服务器JSON格式 例如 用户列表作为JSONArray of JSONObject 每个对象都包含单个用户的信息 姓名 位置 电话号码等 处理这种格式的信息时 将所有内容保留在其中会更有
  • 如何替换 Android 中已弃用的 Bundle/Argument get(key) 调用

    我有以下扩展函数 允许我在应用程序活动和片段之间传递捆绑数据项 inline fun
  • Android 应用程序安装失败:包 com.my.app 在条目 AndroidManifest.xml 处没有证书

    在 Android Studio 中 我生成了带有密钥库等的签名 APK 将 APK 安装到设备上时失败 并显示 无法安装应用程序 并且在 Android Monitor 中我看到以下行 Package com my app has no
  • Android:初始化本机 AudioRecord 对象时 AudioRecord 错误代码 -20

    Android 我想从麦克风读取缓冲区 以便我可以对其执行处理 以下是我的代码 int sampleRateInHz 8000 44100 22050 and 11025 int channelConfig AudioFormat CHAN
  • 使用 Fragment 在工具栏中实现 SearchView

    当前情况 我的应用程序主页由导航抽屉组成 因此我将视图作为片段加载 我的工具栏中也有搜索图标 我在中实现了它menu xml 下一步我实施了SearchView通过以下问题的答案来获取搜索图标在工具栏中实现搜索 https stackove
  • 带有 Android 支持库 v7 的 Maven Android 插件

    我使用 maven android plugin 构建我的 android 应用程序 它依赖于 android 支持库 v4 和 v7 由于我没有找到如何从developer android com下载整个sdk 因此我无法使用maven
  • 吉夫伦致命信号11

    我正在尝试使用一些本机代码来创建 Gif 我使用绘画绘制图像 创建一些笔画 单击 保存 绘制的图像将保存为 JPG 格式 当我单击 创建 Gif 时 它会获取所有图像并开始创建 gif 这是当我收到致命信号 11 并且应用程序重新启动时 我
  • 覆盖 Android 中的电源按钮

    我正在开发一个应用程序 其中我需要在按下电源按钮时执行一个操作 但不幸的是我无法处理按下电源按钮时的操作 我尝试使用 onKeyDown 和dispatchKeyEvent 方法 但似乎没有任何效果 任何人都可以建议我解决这个问题的任何其他
  • 从ListView中隐藏行而不占用空间

    我有一个带有关联 ArrayAdapter 的 ListView 它在多个活动中显示其内容 不幸的是 现在有必要 我的 ListView 在其中一项设置中不显示其所有元素 而仅显示 属性 未设置为 true 的元素 我想避免使用两个具有不同
  • 错误类型 3 - 活动类不存在

    我正在尝试运行 webRTC 应用程序 但返回以下错误 启动应用程序 com onlinevoicecallapp com onlinevoicecallapp MainActivity 设备外壳命令 am start n com onli
  • 控制 OverlayItem 大小

    我正在构建一个在单个 ItemizedOverlay 中包含几十个 OverlayItems 的地图 我的地图设计为可以非常近距离地查看 大约缩放级别 18 并且 OverlayItems 彼此非常接近 地图放大时看起来不错 但是 如果用户
  • 是否可以通过 Android 应用程序来录音?

    我是一名开发人员 希望创建一个 Android 应用程序来记录电话 这是出于我个人的需要 为了我自己的目的和记录而记录电话 是否有可能做到这一点 是否可以访问麦克风以及通过扬声器发出的声音 我对 Android 开发有点陌生 所以请耐心等待
  • 如何将 Android 添加到 Phonegap 平台版本 3

    经过大量挖掘 我相信这个问题 https stackoverflow com questions 18423444 phonegap 3 doesnt work with andriod studio与我没有添加任何用于构建phonegap
  • 如何为我的 Android Market APK 创建证书?

    我想将我的第一个 APK 应用程序上传到 Android Market 但我收到了此错误 顺便说一下 在 stackoverflow 中搜索时并没有引导我找到正确的链接 市场不接受使用调试证书签名的 APK 创建有效期至少 50 年的新证书
  • 当目标小于 Android O 时,如何在 Android O 上创建快捷方式?

    背景 Android O 对快捷方式的工作方式进行了各种更改 https developer android com preview behavior changes html as https developer android com
  • 离子初始加载时间

    我正在使用 Ionic 构建一个简单的应用程序 但我的应用程序在冷启动时的初始加载时间方面存在性能问题 这是我所做的 collection repeat 代替带有 track by 的 ng repeat 原生滚动 overflow scr
  • Android-dispatchTouchEvent 给了我一个 StackOverflowError

    这里我有一个带有 setOnTouchListener 的 ViewFlipper 它工作得很好 然后我膨胀 ReLayNewsItem 然后将其添加到 ViewFlipper 现在我希望 WebView web 监听触摸事件并将它们传递给
  • 丢失应用程序的密钥库文件(但已启用 Google Play 应用程序签名)

    我已经失去了原来的keystore用于签署我的应用程序的文件 我的应用启用了 Google Play 应用签名 如果我联系 Google 支持人员 是否可以重置密钥 以便我可以继续上传到此包 我希望我可以做到这一点 因为应用程序签名已启用
  • 将对象从手机共享到 Android Wear

    我创建了一个应用程序 在此应用程序中 您拥有包含 2 个字符串 姓名和年龄 和一个位图 头像 的对象 所有内容都保存到 sqlite 数据库中 现在我希望可以在我的智能手表上访问这些对象 所以我想实现的是你可以去启动 启动应用程序并向左和向
  • Android GetPTLAFormat 上的 Phonegap 错误

    我们正在开发一个使用 jQuery 移动和电话间隙的应用程序 一切似乎都工作正常 但是当在连接的 Android 手机上运行应用程序时 我们在 Eclipse logcat 中看到大量类似这样的错误 0 GetPTLAFormat inva

随机推荐

  • Windows 中的 Visual Studio 文件关联

    在 Windows 资源管理器中 当我双击任何 Visual Studio 文件时 cs csproj等 它打开的是旧版本的 VS 而不是最新版本 VS 2017 而且VS与太多的文件类型有关联 我怎样才能改变default视觉工作室 对于
  • Python:使用 tarfile 提取但忽略目录

    如果我有一个带有文件的 tar 文件 path to file txt 有没有办法 在Python中 将文件提取到指定目录而不重新创建目录 path to 我也遇到了这个问题 并根据 ekhumoro 的回答列出了完整的示例 import
  • Angular HttpClient 获取请求 URL 删除主题标签/数字符号

    我正在使用 httpclient get 当我有 在请求 URL 中 它会删除后面的所有内容 Example 预期要求 https jsonplaceholder typicode com users 1 TEST 实际要求 https j
  • 具有自定义子项的 MUI 选择组件

    我正在尝试创建一个Select具有通过列表映射的一系列自定义项的组件 每个项目都有一个特定的类型 并且根据该类型 菜单项将具有特定的 MUI 图标 我创建了一个特定的组件来管理整个Select组件和另一个特定组件来显示每个项目 其值及其图标
  • 将内存中的 H2 数据库保存到磁盘

    如何以二进制模式将完整的嵌入式 h2 内存数据库保存 加载到某个文件或目录以加快加载速度 我想用它来缓存数据 这样我就不必每次都运行创建表 插入子句的所有行 您可以使用常规 持久 数据库 而不是使用内存数据库 即使这样 您仍然可以使用内存表
  • Python 3.6 urllib TypeError:无法将字节连接到 str

    我正在尝试使用 Python 3 6 中的 urllib 从 API 中提取一些 JSON 数据 它需要传递标头信息以进行授权 这是我的代码 import urllib request json headers authorization
  • 提升精神气整数,文字默认值

    我想解析具有特定文字默认值的数字 例如 如果程序接收到 nan 或 n a 则整数默认值为 1 Example program include
  • ElasticSearch 在哪里存储持久设置?

    当我通过以下方式获取 ElasticSearch 服务器设置时 curl XGET localhost 9200 cluster settings 我看到持久性和瞬态设置 persistent cluster routing allocat
  • 通过 powershell 或 Azure Devops 管道步骤在 Azure 数据工厂上以编程方式“发布”

    这个问题不会有任何代码 因为到目前为止我还没有找到任何可能的方法 但甚至没有直接的方法不 这是不可能的 Azure 数据工厂使用adf 发布分支作为 master 之上的官方分支 当用户在 GUI 上单击时 ADF 将所有管道 触发器 链接
  • 检查所有 AsyncTask 是否已完成

    我有 3 个AsyncTasks and 1 ProgressBar 我希望当任何任务执行时 进度条可见 当所有任务完成时 进度条不可见 在Java中 有ExecutorService isTerminated检查所有可运行程序是否已完成
  • 数据表是否缓存 ajaxSource 的结果?

    我已经在 portlet war 文件中嵌入了 jquery 数据表 并且遇到了一些有趣的行为 我需要一些解释 这就是我的 javascript 的样子 http pastebin com qXpwt9A7 http pastebin co
  • 密码保护 CSV 文件

    我正在使用 csv 文件来验证用户登录 是否可以使用密码保护 CSV 文件 我不希望任何人能够通过 url 下载 csv 文件 我用谷歌搜索 发现无法用密码保护 csv 文件 还有其他方法可以用密码保护文件吗 简而言之 答案是否定的 CSV
  • 遗传算法——染色体可以是树吗?

    我正在写我的学位论文 我正在尝试创建一个 GA 以程序化的方式为游戏创建关卡 即使 GA 不是最好的技术 也是可能的 不管怎样 因为我从未与他们一起工作过 所以我正在阅读一些关于 GA 介绍的书籍 问题是 是否有必要将染色体表示为位 或者它
  • ON [主要] 是什么意思?

    我正在创建一个 SQL 设置脚本 并使用其他人的脚本作为示例 这是脚本的示例 SET ANSI NULLS ON GO SET QUOTED IDENTIFIER ON GO CREATE TABLE dbo be Categories C
  • 在 web.config 中设置后,maintainScrollPositionOnPostback="true" 不起作用,但在页面级别起作用,我该怎么办?

    setting 维护ScrollPositionOnPostback true 全局在 web config 中确实有效在我的 xp sp3 中 iis 5 1 下 但不适用于生产服务器 带有 NET 3 5 sp1 和 IIS 6 的 w
  • 我可以将 gRPC 和 webapi 应用程序组合到 C# 中的 .NET Core 3.0 中吗?

    我使用的是 net core 3 0 我有 gRPC 应用程序 我可以通过 gRPC 协议与其进行通信 我认为我的下一步是添加一些 RESTful API 支持 我修改了我的启动类以添加控制器 路由等 当我尝试使用浏览器导航到 API 时
  • org.xml.sax 包可以从多个模块访问:、java.xml

    我们很久以前就写好了 Eclipse 插件 合规级别为 java 1 8 现在我已经将其更改为java 11 我们正在使用and 在构建时 我收到以下错误 org xml sax 包可以从多个模块访问 java xml 有人可以帮忙吗 提前
  • Ruby 音频库

    有没有好的 Ruby 音频库可供我们构建 需要管理 编辑mp3文件 有一个界面 http rubyforge org projects id3lib ruby 到 C mp3 编辑器 以及一个活动的纯红宝石 http rubyforge o
  • linux-kernel模块中的系统调用拦截(内核3.5)

    我需要用我自己的实现替换标准系统调用 例如 SYS mkdir 正如我在一些来源中读到的 包括这个问题 https stackoverflow com questions 12613301 loadable kernel module pr
  • Android:从回收器适配器更改购物车菜单徽章计数器

    我正在尝试开发电子商务类型的应用程序 用户可以在其中将商品添加到购物车 但我无法从适配器更新购物车徽章计数器 这是我的应用程序的屏幕截图 我正在片段内使用回收器视图 我在下面引用了这个链接来了解菜单项的数量 https mobikul co