В этой статье используется конкретный код для Rxjava Monhopit Реализация корзины для корзины покупок для вашей ссылки. Конкретный контент заключается в следующем
Покажите всем, что визуализации в первую очередь
Структура структуры:
1. Фреймворк проекта: MVP, Загрузка изображения выполняется FRESCO, сетевые запросы реализуются с использованием OKTTP+MOROFIT (инкапсулируйте его самостоятельно, добавьте режим Singleton),
2. Заполните добавление данных корзины для покупок (если на интерфейсе нет данных, вы можете добавить данные, используя интерфейсный инструмент).
3. Настройте представление, чтобы реализовать кнопку сложения и вычитания. Каждый раз, когда вы нажимаете на добавление и вычитание, общее количество и общую цену в предмете должны быть соответствующим образом изменены.
4. Когда количество составляет 1, нажмите на знак минус, количество остается неизменной, а тост предлагает пользователю, что минимальное число составляет 1.
5. Общее количество и общая цена внизу - общая цена и общее количество во всех предметах. Если цена количества в каждом элементе изменена, общее количество общей цены внизу должно быть связано с ним.
6. Реализуйте функцию обратного выбора в одном выборе All, введите выбор по умолчанию Впервые, общее количество и общая цена не включены в нижние данные, когда элемент не выбран. Когда выбранное состояние изменяется, общее количество и общая цена дна можно изменить правильно.
7. Нажмите кнопку «Удалить», чтобы удалить элемент. Общее количество и общая цена внизу можно правильно изменить, и данные интерфейса будут удалены.
Добавьте необходимые зависимости и сетевые разрешения
Compile 'com.squareup.retrofit2: Модернизация: 2.0.0-beta4' // mrotfit2 требуется компиляция пакета 'com.squareup.retrofit2: конвертер-GSON: 2.0.0-beta4' // ConverterFactory Package Compile '/com.squareup.retrofit2: converterfactory: 2.0.0.0.0-beta-beta-beta-beta-beta-beta-beta-beta-betarfactorea-beta-beta-betarfatea-betarfactorearfface. пакет зависимости компиляция 'io.reactivex.rxjava2: rxjava: 2.1.3'compile' io.reactivex.rxjava2: rxandroid: 2.0.1'compile 'com.squareup.retrofit2: adapter-rxjava2: 2.3.0'compile 'de.greenrobot: Eventbus: 3.0.0-beta1'compile' com.facebook.fresco: Fresco: 0.11.0 '
<users-permission android: name = "android.permission.internet" />
Субподряд перед использованием режима MVP
чистый пакет
API
открытый класс API {public Static String host = "http://120.27.23.105/product/";}Serviceapi
публичный интерфейс ServiceApi {@get ("getProductDetail") Flowable <xqbean> getXQ (@Query ("pid") int pid, @Query ("Source") String Str); @Get ("addcart") flowable <ddcart> getMsg (@Query ("uid") int uid, @Query ("pid") int pid, @Query ("Source") String Str); @Get ("getCarts") Flowable <cartbean> getCart (@Query ("uid") int uid, @Query ("Source") String Str);}Успешный интерфейс
открытый интерфейс onnetlisenter <t> {void успех (t t);}Модерная упаковка
открытый класс Retrofithepler {public static okhttpclient okhttpclient; общественный статический Serviceapi Serviceapi; / *** Приоритетное выполнение*/ static {getohttpclient (); } public static okhttpclient getohttpclient () {if (okhttpclient == null) {synchronized (okhttpclient.class) {if (okhttpclient == null) {okhttpclient = new okhttpclient (); }} return okhttpclient; } public static serviceapi getServiceapi () {if (serviceapi == null) {synchronized (okhttpclient.class) {if (serviceapi == null) {serviceapi = oncreate (serviceapi.class, api.host); }}} вернуть ServiceApi; } public static <t> t oncreate (class <t> tclass, string url) {mrownorTipt = new MontorOfit.Builder () .BaseUrl (url) .AddConverterFactory (gsonConverterFactory.create ()) .client (ohttpclient) .addcalladapterFactory (rxjava2calladapterFactory.create ()) //. AddCallAdapterFactory (rxjava2calladapterFactory.create ()) .build (); return return.create (tclass); }} пакет бобов
Класс бобов для получения подробной информации страница
открытый класс xqbean {/** * msg: * Продавец: {"Описание": "Я торговец 2", "ICON": "http://120.27.23.105/images/icon.png", "name": "Merchant 2", «ProductNums»: 999, «BACK»: 5, «SELLERID». {"Bargainprice": 111.99, "CreateTime": "2017-10-14T21: 48: 08", "DetailUrl": "https://item.m.jd.com/product/4719303.html?utm_source=AndroidPp 335139774 & utm_term = QQFriends »,« Images »:« https://m.360buyimg.com/n0/jfs/t9004/210/1160 833155/647627/ad6be059/59b4f4e1n9a2b1532.jpg! Q70.jpg | https: //m.360buyimg.com/n0/jfs/t7 504/338/63721388/491286/f5957f53/598e95f1n7f2adb87.jpg! Q70.jpg | https: //m.360buyimg.co M/N0/JFS/T7441/10/64242474/419246/ADB30A7D/598E95FBND989BA0A.JPG! Q70.JPG "," itemType ": 2 , "pid": 9, "цена": 78,99, "pscid": 1, "Salenum": 2356, "Sellerid": 2, "Подзадность": "Каждый фестиваль в середине осени не может быть простым. Независимо от того, где вы находитесь, вам всегда нужен кусок торта, чтобы сделать вашу жизнь более полной, Jd Moonse Love Love Complete, JD Selfopersing, Lightsing, более удивляя, удивляет, Jd Loning Love Love, JD Selfopersing, Lightsing, более удивляя, Jd Comeful, JD Selfopersing, Lightsing, более удивление, удивляет. пальцы "," название ":" Пекин Daoxiangcun Daoxiangcun Festival Festival Mooncake Old Beijing Mooncake Gift Box 655G "} */ Private String MSG; Частный продавец продавца; частный строковый код; частные данные о ценах данных; public String getMsg () {return msg; } public void setMsg (String msg) {this.msg = msg; } public sellerbean getseller () {return Seller; } public void setSeller (Sellerbean Seller) {this.seller = Seller; } public String getCode () {return Code; } public void setCode (String Code) {this.code = code; } public Databean getData () {return data; } public void setData (databean data) {this.data = data; } public Static Class Sellerbean {/** * Описание: я торговец 2 * ИКОН: http://120.27.23.105/images/icon.png * Имя: Мерхант 2 * ProductNums: 999 * Оценка: 5.0 * Sellerid: 2 */Private Strong Description; частный значок строки; Приватное название строки; частный int productnums; частный двойной счет; Частный int sellerid; public String getDescription () {return description; } public void setDescription (строка описание) {this.description = description; } public String getIcon () {return Icon; } public void seticon (string icon) {this.icon = icon; } public String getName () {return name; } public void setName (string name) {this.name = name; } public int getProductnums () {return ProductNums; } public void setProductnums (int productnums) {this.productnums = productnums; } public Double GetScore () {return Score; } public void setScore (двойная оценка) {this.Score = scord; } public int getSellerId () {return SellerId; } public void setSellerId (int sellerid) {this.sellerid = sellerid; }} public Static Class Databean { /** * BargainPrice: 111.99 * CreateTime: 2017-10-14T21: 48: 08 * DeftainUrl: https://item.m.jd.com/product/4719303.html?utm_source=AndroidApp&utm_medium=Appshare&utm_campaign=t_335139774&utm_term=qqufriends * Изображения: https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4 f4e1n9a2b1532.jpg! Q70.jpg | https: //m.360buyimg.com/n0/jfs/t7504/338/63721 388/491286/F5957F53/598E95F1N7F2ADB87.jpg! Q70.jpg | https: //m.360buyimg.co M/N0/JFS/T7441/10/64242474/419246/ADB30A7D/598E95FBND989BA0A.JPG! Q70.JPG * itemtype: 2 * PID: 9 * Цена: 78,99 * PSCID: 1 * Продажи: 2356 * Продажи: 2 * Подзаголовок: Каждый фестиваль в середине осени не может быть простым. Независимо от того, где вы находитесь, вам всегда нужен кусок торта, чтобы сделать вашу жизнь более полной. JD Mooncakes занимается любовью более полным JD, самолетом, молниеносной доставкой, большим количеством сюрпризов, пожалуйста, нажмите с помощью пальца * Название: Пекин Daoxiangcun Daoxiangcun в середине фестиваля в середине фестиваля в середине фестиваля по подарочной коробке Mooncake 655G */ private Double BargePrice; частная строка CreateTime; частная строка Defitulurl; частные струнные изображения; private int itemtype; частный int pid; частная двойная цена; частный int pscid; Частный int saleseNum; Частный int sellerid; частная строка подзаголовок; Приватная строка название; public double getbargainprice () {return bargainprice; } public void setBargainPrice (Double BargainPrice) {this.bargainprice = bargainprice; } public String getCreatetime () {return CreateTime; } public void setCreatetime (String createTime) {this.createtime = createTime; } public String getDetaIlurl () {return detailUrl; } public void setDetaIlurl (String DetailUrl) {this.detailurl = detailurl; } public String getImage () {return Images; } public void setimages (String Images) {this.Images = images; } public int getItemType () {return itemType; } public void setIteMtype (int itemType) {this.ItemType = itemType; } public int getPid () {return pid; } public void setpid (int pid) {this.pid = pid; } public Double GetPrice () {return Price; } public void setPrice (двойная цена) {this.price = цена; } public int getPscid () {return pscid; } public void setPscid (int pscid) {this.pscid = pscid; } public int getSalenum () {return saleseNum; } public void setSAlenum (int saleseNum) {this.salenum = salepenum; } public int getSellerId () {return SellerId; } public void setSellerId (int sellerid) {this.sellerid = sellerid; } public String getSubead () {return subhead; } public void setSubhead (String subhead) {this.subhead = subhead; } public String getTitle () {return title; } public void settitle (строка заголовка) {this.title = title; }}}Бин добавлен в корзину
открытый класс addCart {private String MSG; частный строковый код; public String getMsg () {return msg; } public void setMsg (String msg) {this.msg = msg; } public String getCode () {return Code; } public void setCode (String Code) {this.code = code; }}Категория продукта
открытый класс Cartbean { /*** msg: запрос успешный* код: 0* Данные: [{"Список": [{"BargainPrice": 22,9, "CreateTime": "2017-10-14T21: 48: 08", "DetailUrl": "https://item.m.jd.com/product/25428555.html?utm_source=AndroidApp & utm_medium = appshare & utm_campaign = t_335139774 & utm_term = qqfriends "," Images ":" https://m.360buyimg.com/n0/jfs/t1930/284/2865629620/390243/e3ade9c4/2865629620/390243/e3Ade9c4/2865629620/390243/e3adaD9 56F0A08FNBD3A1235.JPG! Q70.jpg | https: //m.360buyimg.com/n0/jfs/t2137/336/2 802996626/155915/e5e90d7a/56f0a09cn33e01bd0.jpg! Q70.jpg | https: //m.360buy img.com/n0/jfs/t1882/31/2772215910/389956/c8dbf370/56f0a0a2na0c86ea6.jpg ! Q70.jpg | https: //m.360buyimg.com/n0/jfs/t2620/166/2703833710/312660/531a A913/57709035N338578777.jpg! Q70.jpg "," num ": 1," PID ": 24," цена ": 288," PSCID ": 2,« Выбранное »: 0,« Продавень »: 1,« Подвод »:« Покупайте Scired Snack Sciess, 50 для 99 -й зоны 99, «Сторона, более каращная», «Покупайте, более спешная», «Покупайте», «Скорость, а не в районе», «Покупайте», «Покупайте это», а не в районе, последовавшей за 99, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, «Сторона, и в районе». 》 "," Название ":" Три избережных ореха с жареными закусками кремового пекана 225 г/сумка "}, {" Bargainprice ": 11800," CreateTime ":" 2017-10-10t17: 33: 37 "," Defitupurl ":" https://item.m.jd.com/product/4331077107710771077107710771077107 ":" https://item.m.jd.com/product/ .html? Utm#_Source = AndroidApp & UTM#_Medium = appshare & utm#_campaign = t#_335139774 & utm#_term = QQFriends »,« Изображения »:« https://m.360buyimg.com/n0/jfs/t6700 /155/2098998076/156185/6CF95035/595DD5A5NC3A7DAB5 pid ": 57," цена ": 5199," pscid ": 40," Selected ": 0," Sellerid ": 1," subead ":" 【i5 Видео памяти MX150 2G] Full HD Узкая панель 8G память 256 SSD поддерживает распознавание отпечатков пальцев предварительно установленную систему Win10 »,« Название »:« Xiaomi (MI) Air 13,3-дюймовый Full Metal Thin Thin Notement Book (i5-7200U 8G 256G PCLE SSD MX150 2G Независимо Silver/r/n "}, {" Bargainprice ": 99," CreateTime ":" 2017-10-14t21: 38: 26 "," DetailUrl ":" https://item.m.jd.com/product/4345173.html?utm#_source=Androidapp&utm#_medium Share & UTM#_Campaign = T#_335139774 & UTM#_term = QQFriends "," Images ":" https: //m.360buyimg .com/n0/jfs/t6037/35/2944615848/95178/6cd6cff0/594a3a10na4ec7f39.jpg! Q70.jpg | https: //m.360buyimg.com/n0/jfs/t6607/258/1025744923/75738/da120a2d/594a3a12ne3e6bc56.jpg! Q70.jpg | https: //m.360buyimg.com/n0/jfs/t6370/292/1057025420/64655/f87644e3/594a3a12 N5B900606.jpg! Q70.jpg "," NUM ": 1," PID ": 45," цена ": 2999," PSCID ": 39,« Выбранная »: 0,« Продавца »: 1,« Подгод »:« HD Dual Camera, это ясно! Монстр! 1 "," Sellerid ":" 1 "}, {" Список ": [{" Bargainprice ": 6666," CreateTime ":" 2017-10-10t16: 01: 31 "," DetailUrl ":" https://item.m.jd.com/product/5089273 .html? UTM#_Source = AndroidApp & UTM#_Medium = appshare & utm#_campaign = t#_335139774 & utm#_term = QQFriends "," Images ":" https://m.360buyimg.com/n0/jfs/t8284/363/1326459580/71585/6d3e8013/ 59b857f2n6ca75622.jpg! Q70.jpg | https: //m.360buyimg.com/n0/jfs/t9346/182/1406837243/28210 6/68AF5B54/59B8480ANE8AF7F5C.JPG! Q70.jpg | https: //m.360buyimg.com/n0/jfs/t8434/54/1359766 007/56140/579509D9/59B85801NFEA207DB.JPG! Q70.JPG "," NUM ": 1," PID ": 46," Price ": 234," Pscid ": 39,« Выбранное »: 0,« Sellerid »: 2,« подбол »:« Новый iPhone запуска ». Разное "," название ":" Apple iPhone 8 Plus (A1864) 64 ГБ Golden Mobile Unicom Telecom 4G Mobile "}]," Sellername ":" Торговец 2 "," Sellerid ":" 2 "}, {" List ": [{" Bargainprice ": 111.99," CreateTime ":" 2017-10-03t23: 43: 53 "," DetailUrl ":" https://item.m.jd.com/product/4719303.html?utm_sour. utm_medium = appshare & utm_campaign = t_335139774 & utm_term = qq friends »," Images ":" https://m.360buyimg.com /n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1n9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/ N0/JFS/T7504/338/63721388/491286/F5957F53/598E95F1N7F2ADB87.jpg! Q70.jpg | https: //m.360buyimg.com/n0 /jfs/t74441/10/64242474/419246/adb30a7d/598e95fbnd989ba0a.jpg!Q70.jpg","num":5,"pid":12,price":256, «PSCID»: 1, «Выбран»: 0, «Продавец»: 5, «подразделение»: «Каждый фестиваль в середине осмы не может быть простым. Независимо от того, где вы находитесь, вам всегда нужен торт, чтобы сделать вашу жизнь более полной. JD Mooncakes занимается любовью более полным. Mooncake Old Beijing Mooncake Gift Box 655G "}]," Sellername ":" Merchant 5 "," Sellerid ":" 5 "}, {" List ": [{" Bar Gainprice ": 11800," CreateTime ":" 2017-10-03T23: 53: 28 "," DetailUrl ":" https://mitem.jd.hk/ware/view.act Ион? Wareid = 1988853309 & Cachekey = 1ACB07A701ECE8D2434A6AE7FA6870A1 "," Изображения ":" https://m.360buyimg.com/ N0/JFS/T6130/97/1370670410/180682/1109582A/593276B1ND81FE723.jpg! Q70.jpg | https: //m.360buyimg.com/n 0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7nbd94ef1f.jpg! Q70.jpg | https: //m.360buyimg.com/n0 /JFS/T5698/110/2617517836/202970/C9388FEB/593276B7NBD94EF1F.JPG!Q70.jpg|https://m.360buyimg.com/n0 /JFS/T5815/178/2614671118/51656/7F52D137/593276C7N107B725A.JPG!Q70.jpg|https://m.360buyimg.com/n0/j FS/T5878/60/2557817477/30873/4502B606/593276CAN5A7D6357.JPG! Q70.JPG "," NUM ": 1," PID ": 62," Price ": 15999," PSCID ": 40," Selected ": 0," Sopeder ": 6999," PSCID ": 40,": 0, " Продукты компьютерного офиса за 1 юань и вернуться к билетам на тренировки на 5 юаней (как только возвращение закончится) «», «Название»: «Глобальная покупка новых моделей Apple MacBook Pro Apple ноутбук серебряный VP2 Новый 13-дюймовый бар i5/8g/256g»}], «Sellername»: «Торговец». 6 "," Sellerid ":" 6 "}, {" список ": [{" Bargainprice ": 399," CreateTime ":" 2017-10-03t23: 53: 28 "," DetailUrl ":" https://item.m.jd.com/product/143982207.html? utm_source = androidapp & utm_medium = appshare & utm_campaign = t_335139774 & utm_term = qq friends " , «Изображения»: «https://m.360buyimg.com/n0/jfs/t5887/201/859509257/69994/6bde9bf6/59224c24n e854e14c.jpg! Q70.jpg | https: //m.360buyimg.com/n0/jfs/t5641/233/853609022/57374/5c73d281 /59224C24N3324D5F4.JPG!Q70.jpg|https://m.360buyimg.com/n0/jfs/t5641/233/853609022/5737 4/5C73D281/59224C24N3324D5F4.JPG! Q70.JPG "," NUM ": 1," PID ": 86," Price ": 777," Pscid ": 85," Selected ": 0," Sellerid ": 7," Subhead ": 2 шт. Simple Wash Пять мешков с прямыми брюками. 7 "," Sellerid ":" 7 "}, {" List ": [{" Bargainprice ": 111.99," CreateTime ":" 2017-10-14T21: 39: 05 "," DetailUrl ":" https://item.m.jd.com/prod UCT/4719303.html? UTM_SOURCE = AndroidApp & UTM_MEDIUM = APPSHARE & UTM_CAMPAIN = T_335139774 & UTM_ERMEN = QQFIENTS »,« Изображения »:« https: //m.36 0buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1n9a2b153 2.jpg! Q70.jpg | https: //m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f 5957f53/598e95f1n7f2adb87.jpg! Q70.jpg | https: //m.360buyimg.com/n0/jfs/t74 41/10/64242474/419246/ADB30A7D/598E95FBND989BA0A.JPG! Q70.jpg "," NUM ": 12," ID ": 1, цена": 118, "PSCID": 1, "Selected": 0, "Sellerid": 17, "Subhead": "Каждый фестиваль в середине осени не может быть простым. Daoxiangcun Mid-Autumn Festival Mooncake Old Beijing Mooncake Gift Box 655g"}],"sellerName":"Merchant 17","sellerid":"17"},{"list":[{"bargainPrice":111.99,"createtime":"2017-10-14T21:39:05","detailUrl":"https : //item.m.jd.com/product/4719303.html? Utm_source = AndroidApp & utm_medium = appshare & utm_campaign = t_335139774 & utm_term = qqfriends »,« Images »:« https: // m .360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1n9a2b 1532.jpg! Q70.jpg | https: //m.360buyimg.com/n0/jfs/t7504/338/63721388/491286 /f5957f53/598e95f1n7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t 7441/10/64242474/419246/adb30a7d/598e95fbnd989ba0a.jpg! Q70.jpg "," num ": 4, «PID»: 2, «Цена»: 299, «PSCID»: 1, «Выбран»: 0, «Sellerid»: 18, «подзаголовок»: «Каждый фестиваль в середине осени не может быть простым. Независимо от того, где вы находитесь, вам всегда нужен кусок торта, чтобы сделать вашу жизнь более полной, JD Mooncakes делает любовь более полным, JD Self-oversement, Lightning, более удивительные, Phake It Poeke It With High Phise». Деревня Даусин Деревня Даусин в середине осени фестиваля Лунный пирог Старый Пекинский подарочный ящик для лунного пищи 655G "}]," Селдерн ":" Торговец 18 "," Sellerid ":" 18 "}, {" Список ": [{" Bargainprice ": 11800," CreateTime ":" 2017-10-03t23: 53: 28 "," DetailUrl ":" https://mitem.jd.hk/ware /view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images"https://m.360buyimg.com/n0/jfs/t6130/97/1 370670410/180682/1109582A/593276B1ND81FE723.JPG! Q70.jpg | https: //m.360buy img.com/n0/jfs/t5698/110/2617517836/202970/C9388FEB/593276B7NBD94EF1F.JP g! Q70.jpg | https: //m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c93 88FEB/593276B7NBD94EF1F.JPG! Q70.jpg | https: //m.360buyimg.com/n0/jfs/t5815/ 178/2614671118/51656/7F52D137/593276C7N107B725A.JPG! Q70.jpg | https: //m.36 0buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502B606/593276CAN5A7D6357. JPG! Q70.jpg "," num ": 1," PID ": 76," Price ": 37999.99," Pscid ": 40," Selected ": 0," Sellerid ": 20," Подзадача ":« Покупать продукты компьютерного офиса для 1 Yuan и получить 5 Yuan Propon для билетов Train Train Train (Once Train return) "Название" Global Mac Probilop "Globalpop Probilpop Probilpop" Globalpop Probilpplop Probilpop "Globalpop Probilpplop". VP2 Новый 13-дюймовый бар I5/8G/256G "}]," Sellername ":" Торговец 20 "," Sellerid ":" 20 "}, {" Список ": [{" Bargainprice ": 111.99," CreateTime ":" 2017-10-14T21: 39: 05 "," DetailUrl ":" https://item.m.jd.com/product/4719303.html?utm_sour.com/product/4719303.html? p & utm_medium = appshare & utm_campaign = t_335139774 & utm_term = qq friends "," Images ":" https: //m.360buyimg. com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1n9a2b1532.jpg! Q70.jpg | https: //m.360buyimg .com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1n7f2adb87.jpg! Q70.jpg | https: //m.360buyimg. com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbnd989ba0a.jpg! Q70.jpg »,« num »: 1,« pid »: 5,« Прик E ": 88.99," PSCID ": 1,« Выбранная »: 0,« Продавца »: 21,« Подхча Daoxiangcun Festival Festival Старый Пекинский подарочный ящик для лунного пищи 655G "}]," Sellername ":" Merchant 21 "," Sellerid ":" 21 "}]] */ private String Msg; частный строковый код; частный список <databean> data; public String getMsg () {return msg; } public void setMsg (String msg) {this.msg = msg; } public String getCode () {return Code; } public void setCode (String Code) {this.code = code; } public List <databean> getData () {return data; } public void setData (list <databean> data) {this.data = data; } public Static Class Databean { /*** Список: [{"Bargainprice": 22,9, "CreateTime": "2017-10-14T21: 48: 08", "DetailUrl": "https://item.m.jd.com/product/254285555.html?utm_source=AndroidApp&utm_med ium = appshare & utm_campaign = t_335139774 & utm_term = qq friends "," Images ":" https://m.360buyimg.com/n0/jfs/t1930/284/2865629620/390243/e3ad9c4/56f0a08 fnbd3a1235.jpg! Q70.jpg | https: //m.360buyimg.com/n0/jfs/t2137/336/2802996 626/155915/e5e90d7a/56f0a09cn33e01bd0.jpg! Q70.jpg | https: //m.360buyimg.c OM/N0/JFS/T1882/31/2772215910/389956/C8DBF370/56F0A0A2NA0C86EA6.jpg! Q70 .jpg | https: //m.360buyimg.com/n0/jfs/t2620/166/2703833710/312660/531AA913 /57709035N338578777.jpg!Q70.jpg","num":1,1,pid":24,"price": 288,"scid": 2,"selected": 0,0,osellerid":1,"subhedomoke: Scirels Scirrel это》 "," title ":" Три избережных ореха с жареными закусками кремового пекана 225G/сумка "}, {" BargainPrice ": 11800," CreateTime ":" 2017-10-10t17: 33: 37 "," DefintUrl ":" https://item.m.m.m.m. tml? UTM#_Source = AndroidApp & UTM#_Medium = appshare & utm#_campaign = t#_335139774 & utm#_term = qqfriends "," Images ":" https://m.360buyimg.com/n0/jfs/t6700//m.360buyimg.com/n0/jfs/t6700//m.360buyimg.com/n0/jfs/t6700//m.360buyimg.com/n0/jfs/t6700//m.360buyimg.com/n0/jfs/t6700//m.360buyimg.com/campains "," 155/2098998076/156185/6CF95035/595DD5A5NC3A7DAB5.JPG! Q70.JPG "," NUM ": 2," PID ": 57," Price ": 5199," PSCID ": 40,« Выбранная »: 0,« Sellerid »: 1 Видео памяти MX150 2G] Full HD Узкая панель 8G память 256 SSD поддерживает распознавание отпечатков пальцев предварительно установленную систему Win10 »,« Название »:« Xiaomi (MI) Air 13,3-дюймовый Full Metal Thin Thin Notement Book (i5-7200U 8G 256G PCLE SSD MX150 2G Независимо Silver/r/n "}, {" Bargainprice ": 99," CreateTime ":" 2017-10-14t21: 38: 26 "," DetailUrl ":" https://item.m.jd.com/product/4345173.html?utm#_source=Androidapp&utm#_medium Share & UTM#_Campaign = T#_335139774 & UTM#_term = QQFriends "," Images ":" https: //m.360buyimg .com/n0/jfs/t6037/35/2944615848/95178/6cd6cff0/594a3a10na4ec7f39.jpg! Q70.jpg | https: //m.360buyimg.com/n0/jfs/t6607/258/1025744923/75738/da120a2d/594a3a12ne3e6bc56.jpg! Q70.jpg | https: //m.360buyimg.com/n0/jfs/t6370/292/1057025420/64655/f87644e3/594a3a12 N5B900606.jpg! Q70.jpg "," NUM ": 1," PID ": 45," цена ": 2999," PSCID ": 39,« Выбранная »: 0,« Продавца »: 1,« Подгод »:« HD Dual Camera, это ясно! Монстр! частная строка Sellerid; Частный список <Listbean> List; Частный логический чек; public boolean ischeck () {return check; } public void setcheck (boolean check) {this.check = check; } public String getSellername () {return sellername; } public void setSellername (String sellername) {this.sellername = sellername; } public String gestellerId () {return SellerId; } public void setSellerId (string sellerid) {this.sellerid = sellerid; } public List <Listbean> getList () {return List; } public void SetList (List <Listbean> list) {this.list = list; } public Static Class Listbean { /** * BargainPrice: 22,9 * CreateTime: 2017-10-14T21: 48: 08 * DetailUrl: https://item.m.jd.com/product/2542855.html?utm_source=AndroidApp&utm_medium=Appshare&utm_campaign=t_33513974&utm_term=qqufriends * Изображения: https://m.360buyimg.com/n0/jfs/t1930/284/2865629620/390243/E3ADE9C4/56F0A08FNBD3A1235.JPG!Q70.JPG | https: //m.360buyimg.com/n0/jfs/t2137/336/2802996626/155915/e5e90d7a/56f0a09cn33e01bd0.jpg! Q70.jpg | https: //m.360buyimg.com/n0/jfs/t1882/31/2772215910/389956/c8dbf370/56f0a0a2na0c86ea6.jpg! Q70.jpg | https: //m.360buyimg.com/n0/jfs/t2620/166/2703833710/312660/531AA913/57709035N33857877.jpg! Q70.jpg * NUM: 1 * PID: 24 * Цена: 288,0 * PSCID: 2 * Выбран: 0 * Продавец: 1 * Подзаголовок: три предложения белки закуски, 50 выкупок для покупок более 99 в районе, 100 скидки за покупку в районе, спешите и купите》 * Название: Три избранных ореховых закусок. частная строка CreateTime; частная строка Defitulurl; частные струнные изображения; частный int num; частный int pid; частная двойная цена; частный int pscid; частный int выбрал; Частный int sellerid; частная строка подзаголовок; Приватная строка название; private int cou = 1; public int getCou () {return cou; } public void setCou (int cou) {this.cou = cou; } Частный логический чек; public boolean ischeck () {return check; } public void setcheck (boolean check) {this.check = check; } public double getBargainPrice () {return BargePrice; } public void setBargainPrice (Double BargainPrice) {this.bargainprice = bargainprice; } public String getCreatetime () {return CreateTime; } public void setCreatetime (String createTime) {this.createtime = createTime; } public String getDetaIlurl () {return detailUrl; } public void setDetaIlurl (String DetailUrl) {this.detailurl = detailurl; } public String getImage () {return Images; } public void setimages (String Images) {this.Images = images; } public int getNum () {return num; } public void setNum (int num) {this.num = num; } public int getPid () {return pid; } public void setpid (int pid) {this.pid = pid; } public Double GetPrice () {return Price; } public void setPrice (двойная цена) {this.price = цена; } public int getPscid () {return pscid; } public void setPscid (int pscid) {this.pscid = pscid; } public int getSelected () {return Selected; } public void setSelected (int selected) {this.selected = selected; } public int getSellerId () {return SellerId; } public void setSellerId (int sellerid) {this.sellerid = sellerid; } public String getSubead () {return subhead; } public void setSubhead (String subhead) {this.subhead = subhead; } public String getTitle () {return title; } public void settitle (строка заголовка) {this.title = title; }}}} приложение
открытый класс MyApp Extends Application {@Override public void oncreate () {super.oncreate (); Fresco.initialize (это); }} Просмотр слоя
Сначала напишите два интерфейса
Публичный интерфейс icart {void showlist (list <cartbean.databean> grouplist, list <list <cartbean.databean.listbean >> childlist);} публичный интерфейс iview <t> {void showbean (t t); void showtr (string s);}Главная страница
<? xml version = "1.0" Encoding = "UTF-8"?> <linearlayout xmlns: android = "http://schemas.android.com/apk/res/android" xmlns: app = "http://schemas.android.com/apk/res-auto" xmlns: tools = "http://schemas.android.com/tools" android: layout_width = "match_parent" Android: layout_height = "match_parent" Android: Orientation = "Vertical" инструменты: "com.bwie.zhangzhen201708.mainactip Android: id = "@+id /elv" Android: Mayout_weight = "1" Android: Layout_width = "wrap_content" Android: Layout_height = "wrap_content" /> <linearlayout android: layout_weight = "9" Android: Orientation = "horizontal" Android: Layout_Width = "Match_parent" match_parent ". Android: layout_height = "match_parent"> <флажок Android: id = "@+id /Quanxuan" Android: Layout_width = "wrap_content" Android: Layout_height = "wrap_content" /> <textview android: text = "select" android: layout_width = "wrap_content" Android: layout_height = "wrap_content" /> <linearlayout android: layout_marginleft = "50dp" Android: Orientation = "vertical" Android: Layout_width = "wrap_content" Android: Layout_Height = "wrap_content"> <TextView Android: ID = "@+ID /zongia"> <TextView: id = "@+id /zongjia"> <TextView: id = "@+id /zongia" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="total price: 0.0" /> <TextView android:text="total 0 items" android:id="@+id/tv_count" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </Linearlayout> <TextView Android: Text = "Total Checkout" Android: Founal = "#FFD82020" Android: Layout_marginleft = "100DP" Android: Layout_Width = "wrap_content" Android: Layout_Height = "rap_content"/> </> </> </> </> </> </> </> </> </> </> </> </> </> </> </> </> </> </> </> </> </> </>
Главная страница
Общедоступный класс MainActivity расширяет AppCompAtactivity реализует iCart {Private ExpandableListView melv; Частный флажок Mquanxuan; Private TextView Mzongjia; Private TextView mtvcount; Частный myexpandableadapter myexpandableadapter; @Override Protected void Oncreate (Bundle SavedInstanceState) {super.oncreate (savedInstanceState); setContentView (r.layout.activity_main); initView (); новый CartPresenter (this) .getCart (); EventBus.getDefault (). Register (this); mquanxuan.setonclicklistener (new view.onclicklistener () {@override public void onclick (view v) {myexpandableadapter.qx (mquanxuan.ischecked ());}}); } private void initView () {melv = (expandableListView) findViewById (r.id.elv); mquanxuan = (флажок) findviewbyid (r.id.quanxuan); mzongjia = (textview) findviewbyid (r.id.zongjia); mtvcount = (textView) findViewById (r.id.tv_count); } @Override public void showlist (list <cartbean.databean> grouplist, list <list <cartbean.databean.listbean >> childlist) {myexpandableadapter = new myexpandableadapter (grouplist, this, Childlist); melv.setadapter (myexpandableadapter); for (int i = 0; i <grouplist.size (); i ++) {melv.expandGroup (i); }} // Получить значение, передаваемое @subscribe public void onpriceandcount (countryprice cp) {mzongjia.settext ("total"+cp.getCount ()+"item"); mtvcount.settext ("total:"+cp.getPrice ()); } // Получить значение, передаваемое @subscribe public void OnpriceAndcount1 (Messgeevent Event) {// Изменить выбранное состояние mquanxuan.setchecked (event.ischeck ()); } @Override Protected void ondestroy () {super.ondestroy (); Eventbus.getDefault (). Unregister (это); }}Макет второй страницы
<? xml version = "1.0" Encoding = "UTF-8"?> <linearlayout xmlns: android = "http://schemas.android.com/apk/res/android" xmlns: tools = "http://schemas.android.com/tools" android: layout_width = "Match_parent" Match_parent "Match_parent" Match_parent "Match_parent". Android: layout_height = "match_parent" Android: Orientation = "Vertical" Android: id = "@+id/activity_add" Инструменты: context = "com.bwie.zhangzhen20170108.addactivity"> <com.facebook.drawee.view.simpledRaweeeview android: layout_width. Android: id = "@+id /xqsdv1" Android: layout_gravity = "center" Android: Layout_height = "300DP" /> <TextView Android: ID = "@+ID /TVTITLE1" Android: layout_width = "match_parent" Android: Layout_Height = "wrap_content" /linair Android: Orientation = "horizontal" Android: Mayout_width = "match_parent" Android: Layout_height = "wrap_content"> <Кнопка Android: id = "@+id/tiaozhuan1" Android: Layout_weight = "1" Android: Text = "Jump To Cart": Layout_Width = "MATCHILE_PARNT" Android: layout_height = "wrap_content"/> <кнопка Android: id = "@+id/tianjia1" Android: layout_weew = "1" Android: Text = "Добавить в корзину" Android: Layout_width = "Match_parent" Android: Layout_Height = "RAW_CONTENT"/> </> </> </> </> </> </> </> </> </> </> </> </> </> </> </> </> </> </> </> </> </> </> </>
Реализация кода корзины покупок
Addactivity Public Class Extends AppCompatactivity реализует view.onclicklistener, iview {private simpledraweeview mxqsdv; Private TextView mtvtitle; Приватная кнопка Mtiaozhuan; Приватная кнопка Mtianjia; Частный Linearlayout Maddactivity; Частный xqpresenter xqpresenter; @Override Protected void Oncreate (Bundle SavedInstanceState) {super.oncreate (savedInstanceState); setContentView (r.layout.activity_add); initView (); xqpresenter = new xqpresenter (this); xqpresenter.getxq (); } private void initView () {mxqsdv = (simpledraweeview) findviewbyid (r.id.xqsdv1); mtvtitle = (textView) findViewById (r.id.tvtitle1); mtiaozhuan = (кнопка) findviewbyid (r.id.tiaozhuan1); mtiaozhuan.setonclicklistener (это); mtianjia = (кнопка) findviewbyid (r.id.tianjia1); mtianjia.setonclicklistener (это); maddactivity = (linearlayout) findviewbyid (r.id.activity_add); } @Override public void onClick (view v) {switch (v.getId ()) {default: break; // пропустить к MainActivity (Carp Cart) Case R.Id.Tiaozhuan1: StartActivity (новое намерение (это, mainActivity.class)); перерыв; case r.id.tianjia1: xqpresenter.getadd (); перерыв; }} @Override public void showbean (Object o) {xqbean xqbean = (xqbean) o; XQBean.DataBean data = xqBean.getData(); String s = data.getImages().split("//|")[0]; Uri uri =Uri.parse(s);//Address converted to URI mXqsdv.setImageURI(uri); mTvtitle.setText(data.getTitle()+"/n"+data.getPrice()); } @Override public void showStr(String s) { Toast.makeText(this, s, Toast.LENGTH_SHORT).show(); }} eventbus包
设置一个数量和价格的类
public class CountAndPrice { private int count ; private int price; public int getCount() { return count; } public void setCount(int count) { this.count = count; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; }}EventBus
public class MessgeEvent { private boolean check; public boolean isCheck() { return check; } public void setCheck(boolean check) { this.check = check; }} модель
实现详情页model层的接口
public interface IXQModel { public void getXQ(int pid, String str, final OnNetLisenter<XQBean> cgsb);}实现详情页model
public class XQModel implements IXQModel{ @Override public void getXQ(int pid, String str, final OnNetLisenter<XQBean> onNetLisenter) { Flowable<XQBean> flowable = RetrofitHepler.getSerViceAPI().getXQ(pid, str); flowable.observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Consumer<XQBean>() { @Override public void accept(XQBean xqBean) throws Exception { onNetLisenter.Success(xqBean); } }); } public void getAdd(int uid, int pid, String str, final OnNetLisenter<AddCart> onNetLisenter){ Flowable<AddCart> flowable = RetrofitHepler.getSerViceAPI().getMsg(uid, pid, str); flowable.observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Consumer<AddCart>() { @Override public void accept(AddCart addCart) throws Exception { onNetLisenter.Success(addCart); } }); }}购物车的model
public class CartModel { public void getCart(int uid, String str, final OnNetLisenter<CartBean> onNetLisenter){ Flowable<CartBean> flowable = RetrofitHepler.getSerViceAPI().getCart(uid,str); flowable.observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Consumer<CartBean>() { @Override public void accept(CartBean cartBean) throws Exception { onNetLisenter.Success(cartBean); } }); }} presenter层
详情页的P层
public class XQPresenter { private final XQModel xqModel; private IView iView; public XQPresenter(IView iView) { xqModel = new XQModel(); this.iView=iView; } public void getXQ(){ xqModel.getXQ(12, "android", new OnNetLisenter<XQBean>() { @Override public void Success(XQBean xqBean) { iView.showBean(xqBean); } }); } public void getAdd(){ xqModel.getAdd(3043, 12, "android", new OnNetLisenter<AddCart>() { @Override public void Success(AddCart addCart) { iView.showStr(addCart.getMsg()); } }); }}购物车的P层
public class CartPresenter { private ICart iCart; private final CartModel cartModel; public CartPresenter(ICart iCart) { this.iCart = iCart; cartModel = new CartModel(); } public void getCart(){ cartModel.getCart(3043,"android",new OnNetLisenter<CartBean>(){ @Override public void Success(CartBean cartBean) { List<CartBean.DataBean> grouplist = cartBean.getData(); List<List<CartBean.DataBean.ListBean>> childlist = new ArrayList<>(); for (int i = 0; i < grouplist.size(); i++) { CartBean.DataBean dataBean = grouplist.get(i); List<CartBean.DataBean.ListBean> list = dataBean.getList(); childlist.add(list); } iCart.showlist(grouplist,childlist); } }); }}адаптер
public class MyExpandableAdapter extends BaseExpandableListAdapter { private List<CartBean.DataBean> groupdata; private Context context; private List<List<CartBean.DataBean.ListBean>> childlist; public MyExpandableAdapter( List<CartBean.DataBean> groupdata, Context context, List<List<CartBean.DataBean.ListBean>> childlist) { this.groupdata = groupdata; this.context = context; this.childlist = childlist; } @Override public int getGroupCount() { return groupdata.size(); } @Override public int getChildrenCount(int groupPosition) { return childlist.get(groupPosition).size(); } @Override public Object getGroup(int groupPosition) { return groupdata.get(groupPosition); } @Override public Object getChild(int groupPosition, int childPosition) { return null; } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public boolean hasStableIds() { return false; } @Override public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { final GroupViewHolder holder; if (convertView == null) { convertView = View.inflate(context, R.layout.group_item, null); holder = new GroupViewHolder(); holder.tv_group = (TextView) convertView.findViewById(R.id.tv_group); holder.group_cb = (CheckBox) convertView.findViewById(R.id.gx_group); convertView.setTag(holder); } else { holder = (GroupViewHolder) convertView.getTag(); } final CartBean.DataBean dataBean = groupdata.get(groupPosition); String sellerName = dataBean.getSellerName(); holder.group_cb.setChecked(dataBean.isCheck()); //Click the status of the first-level checkbox holder.group_cb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dataBean.setCheck(holder.group_cb.isChecked()); //Change the status of all children changeChildState(groupPosition,holder.group_cb.isChecked()); EventBus.getDefault().post(jS()); //Judge the status of all selected by judging the checkbox of the first level changeMianQXstatus(checkGroupAll()); notifyDataSetChanged(); } }); return convertView; } @Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { final ChildViewHolder holder; if (convertView == null) { convertView = View.inflate(context, R.layout.child_item, null); holder = new ChildViewHolder(); holder.tv_title= (TextView) convertView.findViewById(R.id.title); holder.price= (TextView) convertView.findViewById(R.id.price); holder.child_cb= (CheckBox) convertView.findViewById(R.id.gouxuan_child); holder.add= (TextView) convertView.findViewById(R.id.jia); holder.del= (TextView) convertView.findViewById(R.id.del); holder.jian= (TextView) convertView.findViewById(R.id.jian); holder.sdv= (SimpleDraweeView) convertView.findViewById(R.id.title_img); holder.tv_num= (TextView) convertView.findViewById(R.id.tv_num); holder.yanse= (TextView) convertView.findViewById(R.id.yanse); convertView.setTag(holder); } else { holder = (ChildViewHolder) convertView.getTag(); } final CartBean.DataBean.ListBean listBean = childlist.get(groupPosition).get(childPosition); int price = (int) listBean.getPrice(); holder.child_cb.setChecked(listBean.isCheck()); holder.price.setText("¥:"+price+""); String title = listBean.getTitle(); holder.tv_title.setText(title); String subhead = listBean.getSubhead(); String substring = subhead.substring(1, 10)+"......"; holder.yanse.setText(substring); String images = listBean.getImages(); String[] split = images.split("//|"); String s = split[0]; Uri uri=Uri.parse(s); holder.sdv.setImageURI(uri); // listBean.setCou(Integer.parseInt(holder.tv_num.getText().toString())); // checkBox click event holder.child_cb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listBean.setCheck(holder.child_cb.isChecked()); EventBus.getDefault().post(jS()); //If the checkBox of the second level is selected, let the checkBox of the first level checkBox check if(holder.child_cb.isChecked()) { if (ischeckAllchild(groupPosition)) { //Change the status of the first level checkBox changeGroupstatus(groupPosition,true); //Change the status of the selected state by judging the status of the first level CheckBox to changeMianQXstatus(checkGroupAll()); } }else{ changeGroupstatus(groupPosition,false); changeMianQXstatus(checkGroupAll()); } notifyDataSetChanged(); } }); //Click add function holder.add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int cou = listBean.getCou(); holder.tv_num.setText(++cou+""); listBean.setCou(cou); if(holder.child_cb.isChecked()){ EventBus.getDefault().post(jS()); } } }); //Click the function of decreasing holder.jian.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int cou = listBean.getCou(); if(cou==1) { Toast.makeText(context, "The minimum number is 1", Toast.LENGTH_SHORT).show(); return;} holder.tv_num.setText(--cou+""); listBean.setCou(cou); if (holder.child_cb.isChecked()) { EventBus.getDefault().post(jS()); } } }); //Click to delete holder.del.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { List<CartBean.DataBean.ListBean> listBeen = childlist.get(groupPosition); CartBean.DataBean.ListBean remove = listBeen.remove(childPosition); if(listBeen.size()==0){ childlist.remove(childPosition); groupdata.remove(groupPosition); } EventBus.getDefault().post(jS()); notifyDataSetChanged(); } }); return convertView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } class GroupViewHolder { CheckBox group_cb; TextView tv_group; } class ChildViewHolder { CheckBox child_cb; TextView tv_title,price,yanse,tv_num; TextView del,add,jian; SimpleDraweeView sdv; } /** * Determine that all the second level is CheckBox or not checked* */ private boolean ischeckAllchild(int g){ List<CartBean.DataBean.ListBean> listBeen = childlist.get(g); for (int i = 0; i <listBeen.size() ; i++) { CartBean.DataBean.ListBean listBean = listBeen.get(i); if(!listBean.isCheck()){ return false; }} вернуть true; } /** * Calculate quantity and price* Get the second-level CheckBox by traversing the first-level. If it is the selected selected state, count their total quantity and price*/ private CountAndPrice jS(){ int cou=0; int jiage=0; for (int i = 0; i <groupdata.size() ; i++) { for (int j = 0; j <childlist.get(i).size() ; j++) { CartBean.DataBean.ListBean listBean = childlist.get(i).get(j); if(listBean.isCheck()){ cou+=listBean.getCou(); jiage+=(int)listBean.getPrice()*listBean.getCou(); } } } } CountAndPrice countAndPrice = new CountAndPrice(); countAndPrice.setCount(cou); countAndPrice.setPrice(jiaage); return countAndPrice; } /** * Change the status of the first-level list*/ private void changeGroupstatus(int groupPosition,boolean flag ){ CartBean.DataBean dataBean = groupdata.get(groupPosition); dataBean.setCheck(flag); } /** * Change the status of all selected* */ private void changeMianQXstatus(boolean flag){ MessgeEvent messageEvent = new MessgeEvent(); messageEvent.setCheck(flag); EventBus.getDefault().post(messgeEvent); } /** * Determine whether all the first level are selected*/ private boolean checkGroupAll(){ for (int i = 0; i < groupdata.size(); i++) { if(!groupdata.get(i).isCheck()){ return false; }} вернуть true; } /** * Change the status of all children*/ private void changeChildState(int grouPistion,boolean flag){ List<CartBean.DataBean.ListBean> listBeen = childlist.get(grouPistion); for (int i = 0; i < listBeen.size(); i++) { listBeen.get(i).setCheck(flag); } } /** * Change all selected*/ public void qx(boolean flag){ for (int i = 0; i < groupdata.size(); i++) { changeGroupstatus(i, flag); changeChildState(i, flag); } EventBus.getDefault().post(jS()); notifyDataSetChanged(); }}group_item.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <CheckBox android:id="@+id/gx_group" android:focusable="false" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/tv_group" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
child_item.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/title" android:layout_marginLeft="20dp" android:layout_width="match_parent" android:layout_height="wrap_content" /> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <CheckBox android:layout_marginLeft="20dp" android:gravity="center_vertical" android:id="@+id/gouxuan_child" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <com.facebook.drawee.view.SimpleDraweeView android:gravity="center_vertical" android:id="@+id/title_img" android:layout_width="50dp" android:layout_height="50dp" /> <LinearLayout android:orientation="vertical" android:layout_marginLeft="30dp" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/price" android:layout_marginLeft="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/yanse" android:layout_marginLeft="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <LinearLayout android:layout_marginLeft="100dp" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/jian" android:layout_width="20dp" android:layout_height="20dp" android:textSize="15sp" android:text="一"/> <TextView android:id="@+id/tv_num" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:paddingBottom="2dp" android:paddingLeft="20dp" android:paddingRight="20dp" android:paddingTop="2dp" android:text="1" /> <TextView android:id="@+id/jia" android:layout_width="20dp" android:layout_height="20dp" android:layout_marginLeft="5dp" android:text="+" android:textSize="15sp"/> </LinearLayout> </LinearLayout> <TextView android:id="@+id/del" android:layout_marginLeft="20dp" android:text="删除" android:textColor="#FFFFFF" android:background="#ff3660" android:layout_width="32dp" android:layout_height="29dp" /> </LinearLayout></LinearLayout>
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.