1. 程式人生 > >EventBus與介面卡

EventBus與介面卡

EventBus匯入依賴:compile 'org.greenrobot:eventbus:3.0.0'

//註冊EventBus
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    view = inflater.inflate(R.layout.fragment_shopping, null);
    //註冊EventBus
EventBus.getDefault().register(this);
    initView();
    return 
view; }
//訂閱方法,當接收到事件的時候,會呼叫該方法
//獲取價格
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(MoneyAndCount moneyAndCount) {
    //double型別保留2位小數點
DecimalFormat df = new DecimalFormat("######0.00");
    contprice.setText("總價:" + df.format(moneyAndCount.getPrice()));
    jiesuan.setText("結算(" + moneyAndCount.getCount() + ")"
); }
//解除註冊
@Override
public void onDestroy() {
    super.onDestroy();
    //解除註冊
EventBus.getDefault().unregister(this);
}
二級列表介面卡:
private List<CheckShoppingCardBean.DataBean> grouplist;
private List<List<CheckShoppingCardBean.DataBean.ListBean>> childlist;
private Context context;
private double 
money; private int counts; public MExpandlbAdapter(List<CheckShoppingCardBean.DataBean> grouplist, List<List<CheckShoppingCardBean.DataBean.ListBean>> childlist, Context context) { this.grouplist = grouplist; this.childlist = childlist; this.context = context; } @Override public int getGroupCount() { return grouplist.size(); } @Override public int getChildrenCount(int i) { return childlist.get(i).size(); } @Override public Object getGroup(int i) { return grouplist.get(i); } @Override public Object getChild(int i, int i1) { return childlist.get(i1); } @Override public long getGroupId(int i) { return i; } @Override public long getChildId(int i, int i1) { return i1; } @Override public boolean hasStableIds() { return false; } @Override public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) { View view1; final V1 v1; if (view == null) { v1 = new V1(); view1 = View.inflate(context, R.layout.cardshopsitem, null); v1.groupchecked = view1.findViewById(R.id.grouchecked); view1.setTag(v1); } else { view1 = view; v1 = (V1) view1.getTag(); } v1.groupchecked.setChecked(grouplist.get(i).isGroupChecked()); v1.groupchecked.setText(grouplist.get(i).getSellerName()); //父列表點選選中,然後選中所有子列表 v1.groupchecked.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (v1.groupchecked.isChecked()) { grouplist.get(i).setGroupChecked(v1.groupchecked.isChecked()); isGroupAllChild(v1.groupchecked.isChecked(), i); //父列表點選全選中,然後全選 boolean all = isAll(); Log.e("All", all + ""); if (all) { Toast.makeText(context, "全選", Toast.LENGTH_SHORT).show(); EventBus.getDefault().post(new All(v1.groupchecked.isChecked())); } //計算價格總和,和數量總和 allPriceAndCount(); } else { grouplist.get(i).setGroupChecked(v1.groupchecked.isChecked()); isGroupAllChild(v1.groupchecked.isChecked(), i); EventBus.getDefault().post(new All(v1.groupchecked.isChecked())); //計算價格總和,和數量總和 allPriceAndCount(); } } }); return view1; } @Override public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) { View view1; final V2 v2; if (view == null) { v2 = new V2(); view1 = View.inflate(context, R.layout.goodsitem, null); v2.childchecked = view1.findViewById(R.id.childchecked); v2.goodsimg = view1.findViewById(R.id.goodsimg); v2.titles = view1.findViewById(R.id.titles); v2.price = view1.findViewById(R.id.price); v2.numjiajia = view1.findViewById(R.id.numjiajia); v2.numjianjian = view1.findViewById(R.id.numjianjian); v2.num = view1.findViewById(R.id.num); view1.setTag(v2); } else { view1 = view; v2 = (V2) view1.getTag(); } ImageLoader instance = ImageLoader.getInstance(); v2.childchecked.setChecked(childlist.get(i).get(i1).ischildckecked()); instance.displayImage(childlist.get(i).get(i1).getImages().split("\\|")[0], v2.goodsimg); v2.titles.setText(childlist.get(i).get(i1).getTitle()); v2.price.setText(childlist.get(i).get(i1).getPrice() + ""); v2.num.setText(childlist.get(i).get(i1).getNum() + ""); //數量加加減減監聽 v2.numjiajia.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int num = childlist.get(i).get(i1).getNum(); if (num < 9) { childlist.get(i).get(i1).setNum(num + 1); notifyDataSetChanged(); //計算價格總和,和數量總和 allPriceAndCount(); } else { Toast.makeText(context, "數量以到達商品庫存上線", Toast.LENGTH_SHORT).show(); } } }); v2.numjianjian.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int num = childlist.get(i).get(i1).getNum(); if (num > 1) { childlist.get(i).get(i1).setNum(num - 1); notifyDataSetChanged(); //計算價格總和,和數量總和 allPriceAndCount(); } else { Toast.makeText(context, "商品數量已經是1了", Toast.LENGTH_SHORT).show(); } } }); //子列表點選選中,判斷子列表是否都選中,然後選中父列表 v2.childchecked.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (v2.childchecked.isChecked()) { childlist.get(i).get(i1).setIschildckecked(v2.childchecked.isChecked()); boolean childChecked = isChildChecked(i); if (childChecked) { grouplist.get(i).setGroupChecked(v2.childchecked.isChecked()); } //重新整理介面卡 notifyDataSetChanged(); boolean all = isAll(); Log.e("All", all + ""); if (all) { Toast.makeText(context, "全選", Toast.LENGTH_SHORT).show(); EventBus.getDefault().post(new All(v2.childchecked.isChecked())); } //計算價格總和,和數量總和 allPriceAndCount(); } else { childlist.get(i).get(i1).setIschildckecked(v2.childchecked.isChecked()); grouplist.get(i).setGroupChecked(v2.childchecked.isChecked()); //重新整理介面卡 notifyDataSetChanged(); EventBus.getDefault().post(new All(v2.childchecked.isChecked())); //計算價格總和,和數量總和 allPriceAndCount(); } } }); return view1; } @Override public boolean isChildSelectable(int i, int i1) { return true; } //優化類 class V1 { CheckBox groupchecked; } class V2 { CheckBox childchecked; ImageView goodsimg; TextView titles; TextView price; TextView numjianjian; TextView num; TextView numjiajia; } /*** * 子列表點選選中,判斷子列表是否都選中,然後選中父列表 */ public boolean isChildChecked(int positon) { List<CheckShoppingCardBean.DataBean.ListBean> listBeen = childlist.get(positon); for (int i = 0; i < listBeen.size(); i++) { if (!listBeen.get(i).ischildckecked()) { return false; } } return true; } /*** * 父列表點選選中,然後選中所有子列表 */ public void isGroupAllChild(boolean b, int positon) { List<CheckShoppingCardBean.DataBean.ListBean> listBeen = childlist.get(positon); if (b) { for (int i = 0; i < listBeen.size(); i++) { listBeen.get(i).setIschildckecked(b); } } else { for (int i = 0; i < listBeen.size(); i++) { listBeen.get(i).setIschildckecked(b); } } notifyDataSetChanged(); } /*** * 父列表點選全選中,然後全選 */ public boolean isAll() { for (int i = 0; i < grouplist.size(); i++) { if (!grouplist.get(i).isGroupChecked()) { return false; } } return true; } /*** * 點選全選父列表,子列表全選 */ public void setAll(boolean b) { for (int i = 0; i < grouplist.size(); i++) { grouplist.get(i).setGroupChecked(b); } for (int i = 0; i < childlist.size(); i++) { List<CheckShoppingCardBean.DataBean.ListBean> listBeen = childlist.get(i); for (int j = 0; j < listBeen.size(); j++) { listBeen.get(j).setIschildckecked(b); } } //重新整理介面卡 notifyDataSetChanged(); //計算價格總和,和數量總和 allPriceAndCount(); } /*** * 計算價格總和,和數量總和 */ public void allPriceAndCount() { money = 0; counts = 0; for (int i = 0; i < childlist.size(); i++) { List<CheckShoppingCardBean.DataBean.ListBean> listBeen = childlist.get(i); for (int j = 0; j < listBeen.size(); j++) { if (listBeen.get(j).ischildckecked()) { money += listBeen.get(j).getPrice() * listBeen.get(j).getNum(); counts += listBeen.get(j).getNum(); } } } //傳送價格數量進行顯示 EventBus.getDefault().post(new MoneyAndCount(money, counts)); }

相關推薦

EventBus介面卡

EventBus匯入依賴:compile 'org.greenrobot:eventbus:3.0.0' //註冊EventBus public View onCreateView(LayoutInflater inflater, @Nullable ViewGrou

Java IO框架介面卡模式、裝飾器模式

IO框架: 介面卡模式: 介面卡模式(Adapter Pattern)是作為兩個不相容的介面之間的橋樑。這種型別的設計模式屬於結構型模式,它結合了兩個獨立介面的功能。 這種模式涉及到一個單一的類,該類負責加入獨立的或不相容的介面功能。舉個真實的例子,讀卡器是作為記憶體卡和筆

Swift 中的設計模式 #3 外觀模式介面卡模式

作者:Andrew Jaffee,原文連結,原文日期:2018-09-04 譯者:鄭一一;校對:BigNerdCoding,pmst,Forelax;定稿:Forelax 本文是我的設計模式系列教程的第三篇。在第一篇文章中,我介紹了 建立型模式中的工廠模式和單例模式。在第二篇文章中,又討論了一下

使用Activity和Delegate介面卡互動

在這個Demo裡,我們會分析如何通過委託模式(Delegation Pattern)幫助開發者把所有的業務邏輯從介面卡中移到Activity中。我們建立一個簡單的應用程式,通過該應用程式可以向列表中新增電話號碼,列表中每一行都有一個Remove按鈕,用於刪除電話

裝飾者模式,代理模式介面卡模式的比較

裝飾者與適配者模式的區別 1.關於新職責:介面卡也可以在轉換時增加新的職責,但主要目的不在此。裝飾者模式主要是給被裝飾者增加新職責的。 2.關於原介面:介面卡模式是用新介面來呼叫原介面,原介面對新系統是不可見或者說不可用的。裝飾者模式原封不動的使用原介面,系統對裝飾的物件也通過原介面來完成使用。(增加新介

Android介面卡檢視介面卡AdapterView & Adapter

一、介面卡檢視與介面卡AdapterView& Adapter         介面卡檢視AdapterView繼承自檢視組ViewGroup (一個包含其他子檢視的容器),它是需要介面卡的檢視容器,常用的介面卡檢視有 Spinner、ListView、GridVi

設計模式-門面模式介面卡模式

//門面模式 var DED = window.DED || {} DED.util = { stopPropagation:function(e){ if(e.stopPropagation){ //w3 interface e.stopPropagat

JavaEE_Mybatis_SpringMVC_Spring_lesson3_註解處理器對映器介面卡以及處理器(Controller)

註解的處理器對映器相比與非註解的處理器對映器的優勢 :可以在一個類中寫多個RequestMapping("url")的格式,不需要以實現介面的形式進行開發, 註解:可以在一個類中完成多個action, 非註解:實現介面,一個類中只能寫一個action 另外:註解的處理器

C++的多型介面卡模式

       原創文章,轉載請註明出處,謝謝!               作者:清林,部落格名:飛空靜渡 我們知道,c++的多型可以為不同的實現提供同一個介面,介面卡模式也可以讓同一介面得到不同的實現。下面我們通過一個例子來說明這兩個東東 :) 假設,我要設計一套對磁

設計模式-策略模式介面卡模式

某移動支付系統(PaySystem)在實現賬戶資金轉入和轉出時需進行身份驗證,該系統為使用者提供了多種身份驗證方式,例如密碼驗證(PasswordValidator)、指紋驗證(FingerprintV

Spinner介面卡Adapter使用總結

Spinner的使用離不開和Adapter結合使用,下面將基本的常用法介紹一下,主要還是為初學者提供些幫助 第一步:建立佈局檔案 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andr

基於藍芽介面卡的PCAndroid端通訊

Demo 首先,直接給Demo,對於只想使用的朋友,直接下載使用即可。Demo其實也是從網上爬來的,之後做了各種除錯和修改。 原有Demo程式碼下載,可見地址。 修改後Demo效果如下。效果不太清晰,見諒。 (1)PC端 (2)Android端 細節實現 Android端a

藉助事件匯流排框架(EventBus)實現FragmentActivity通訊

最開始學Android的時候,Fragment與Activity之間的通訊一直是比較讓人頭疼的部分。 所謂通訊,其實就是要讓Activity裡的某些成員資訊與Fragment共享(或者相反)。一個方法是藉助回撥介面,Fragment裡定義一個介面由Activity實現,Fragment裡獲取Ac

C++沉思錄__函式物件函式物件介面卡

所謂的函式物件,就是過載了類的()作用符的類物件,其行為類似於函式,因而又叫做仿函式。函式物件提供了一種方法,把將要呼叫的函式與準備遞給這個函式的隱式引數綁定了起來。這樣,我們就可以用簡單的語法建立起復雜的表示式。 與一般程式相比,函式物件允許我們把組合操作作為執行程式的一部分,之所以可以進行這

EventBus學習進階

初次看到這個庫,覺得有點似曾相識,自己目前在用的一種通訊方式恰恰擁有這個庫的簡單功能,上手很快。 github地址:https://github.com/greenrobot/EventBus 文件寫的太簡單,有大神總結好的使用方法和翻譯如下: 快速Android開發系列通訊篇之Eve

mybatis原理設計模式-日誌模組- 介面卡模式

 在講設計模式之前,得先知道java程式設計中得六大原則,才能更好得理解我們得系統為什麼需要設計模式 1 單一職責原則   一個類只負責一種職責,只有這種職責的改變會導致這個類的變更。繞口一點的正統說法:不要存在多於一個原因導致類變更   假如:類T 負責有兩種職責 P1,P2;當P1發生改變時,需要修

ListView自定義介面卡(顯示java端的資料)

一、自定義介面卡 1、BaseAdapter:是所有介面卡類的父類,可以對列表項進行最大限度的定製 2、自定義介面卡中的方法 @Override public int getCount() {//從java端獲取到多少條資料 return da

EventBus註冊解註冊邏輯封裝

EventBus註冊與解註冊邏輯封裝 @MainThread public void toggleEvent(boolean enabled) { final boolean hasRegistered = EventBus.getDefault().isRegistered

Android 中介面卡fragment或者activity的回撥使用

如何使用介面回撥       使用場景:在activity或者fragment與adapter的回撥中        介面卡中使用: public OnUpdat

設計模式XML(三)組合模式、橋接模式和介面卡模式(C++)

一、實驗目的及要求 1、掌握結構型模式的概念。 2、掌握介面卡模式、橋接模式、組合模式、裝飾器模式、外觀模式、享元模式、代理模式的構造方式及使用情景。 二、實驗裝置(環境) 1、   軟體需求: Dev-Cpp5.4, Rat