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:从回收器适配器更改购物车菜单徽章计数器 的相关文章

  • Android 中多个蓝牙连接的自定义 UUID

    我有一个 Android 设备作为服务器连接到多个蓝牙 Android 客户端 我了解 UUID 的概念以及它的独特之处 我的问题是 我可以为连接到我的服务器的所有客户端使用相同的 UUID 吗 如果没有 我如何以编程方式为我的客户端生成
  • 如何获取每个StorageVolume的可用大小和总大小?

    背景 谷歌 悲伤 计划破坏存储权限 https www xda developers com android q storage access framework scoped storage 这样应用程序将无法使用标准文件 API 和文件
  • 我在布局上看不到任何 FirebaseRecyclerAdapter 项目

    我试图将数据从 Firebase 数据库检索到我的布局 但我看不到任何项目FirebaseRecyclerAdapter在布局中 请帮忙 我按照一个教程展示了如何做到这一点 当我运行应用程序时 我没有看到任何项目 但我可以滚动 public
  • Cheesesquare:enterAlways 会产生错误的布局

    Adding enterAlways到 Cheesesquare 演示的滚动标志
  • Android Q:file.mkdirs() 返回 false

    我们有一个应用程序 使用外部存储来存储一些临时文件 图像 二进制数据 该代码已经运行了几年 直到最近才发生重大变化 在 Android Q 上它不起作用 File f new File Environment getExternalStor
  • 如何使用 Google Maps for Android V2 处理地图移动结束?

    我想在地图中心更改后立即对地址进行地理编码 如何使用新的 Android 版 Google 地图 V2 处理地图移动 我说的是用户用手指拖动地图的情况 查看新的地图 API Override public void onMapReady G
  • Android WebView里面的ScrollView只滚动scrollview

    在我的应用程序中 我有一个 ScrollView 其中包含一些线性视图 一些文本视图和一个 Webview 然后是其他线性布局等 问题是 WebView 不滚动 Scroll 仅侦听 ScrollView 有什么建议么
  • Bitmap.getPixels() 中的 IllegalArgumentException

    我想将数据从位图复制到int using getPixels 这是我当前的代码 int pixels new int myBitmap getHeight myBitmap getWidth myBitmap getPixels pixel
  • Dialog.setTitle 不显示标题

    我正在尝试向我的对话框添加自定义标题 但是每当我运行我的应用程序时 它都不会显示标题 我创建对话框的代码是 final Dialog passwordDialog new Dialog this passwordDialog setCont
  • Android 深度链接至 Instagram 应用

    Instagram 已经发布了 iOS 深层链接的 url 方案 但尚未为 Android 创建文档 有没有办法深入链接到 Android 上的 Instagram 应用程序 以转到 Instagram 应用程序中的特定位置 例如 Inst
  • Android - AudioRecord类不读取数据,audioData和fftArray返回零

    我是 Android 新手 一直在开发音调分析器应用程序 最低 SDK 8 我读了很多关于如何实现 Audiorecord 类的文章 但我想知道为什么它在我录制时不读取任何数据 我尝试显示 audioData 和 fftArray 的值 但
  • 使用片段时应用程序崩溃

    我正在处理碎片和 我的代码中有一个我找不到的问题 logcat 指向我的一个片段中的这段代码 Override public View onCreateView LayoutInflater inflater ViewGroup conta
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 我应该释放或重置 MediaPlayer 吗?

    我有自己的自定义适配器类 称为 WordAdapter 并且我正在使用媒体播放器 名为pronounce WordAdapter 类中的全局变量 我有不同的活动 其中每个列表项都有线性布局 名为linearLayout 我正在设置onCli
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • Dagger 2 没有生成我的组件类

    我正在使用 Dagger 2 创建我的依赖注入 几个小时前它还在工作 但现在不再生成组件 这是我创建组件的地方 public class App extends Application CacheComponent mCacheCompon
  • 卡片视图 单击卡片移至新活动

    我是 Android 编程新手 正在研究卡片布局 我想知道如何使其可点击 android clickable true android foreground android attr selectableItemBackground 我的卡
  • Android - 以编程方式选择菜单选项

    有没有办法以编程方式选择菜单选项 基本上 我希望视图中的按钮能够执行与按特定菜单选项相同的操作 我正在考虑尝试调用 onOptionsItemSelected MenuItem item 但我不知道要为菜单项添加什么 是的 有一种方法可以选
  • Android:如何从网络异步获取搜索建议?

    我创建了一个可搜索的活动 现在 我想添加从网络服务获取的搜索建议 我想异步获取这些建议 根据添加自定义建议 http developer android com guide topics search adding custom sugge
  • 如何使用 AccessibilityService 在 Android 中模拟按键

    我正在编写一个辅助服务 我一直在尝试在应用程序上进行一些自动搜索 我使用accessibilityservice action paste来填充EditText 然后我需要模拟软键盘上的按键 但我不知道如何做 你们能帮我一下吗 你可以尝试A

随机推荐

  • 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