0.优化
1.个人中心页面的布局
1 <?xml version="1.0" encoding="utf-8"?> 2 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:background="@color/app_background"> 6 7 <LinearLayout 8 android:layout_width="match_parent" 9 android:layout_height="wrap_content" 10 android:orientation="vertical"> 11 12 <!--头像部分--> 13 <RelativeLayout 14 android:layout_width="match_parent" 15 android:layout_height="160dp" 16 android:background="@android:color/holo_orange_dark"> 17 18 <de.hdodenhof.circleimageview.CircleImageView 19 android:id="@+id/img_user_avatar" 20 android:layout_width="80dp" 21 android:layout_height="80dp" 22 android:layout_centerHorizontal="true" 23 android:layout_marginTop="30dp" 24 android:src="@mipmap/avatar" /> 25 26 <TextView 27 android:layout_width="wrap_content" 28 android:layout_height="wrap_content" 29 android:layout_alignParentBottom="true" 30 android:layout_centerHorizontal="true" 31 android:layout_marginBottom="20dp" 32 android:text="傅猿猿" 33 android:textColor="@android:color/white" 34 android:textSize="16sp" /> 35 36 </RelativeLayout> 37 38 <!--订单部分--> 39 <RelativeLayout 40 android:layout_width="match_parent" 41 android:layout_height="50dp" 42 android:background="@android:color/white" 43 android:orientation="horizontal" 44 android:paddingLeft="10dp" 45 android:paddingRight="10dp"> 46 47 <TextView 48 android:layout_width="wrap_content" 49 android:layout_height="match_parent" 50 android:layout_alignParentLeft="true" 51 android:gravity="center" 52 android:text="我的订单" 53 android:textColor="@android:color/black" /> 54 55 <TextView 56 android:id="@+id/tv_all_order" 57 android:layout_width="wrap_content" 58 android:layout_height="match_parent" 59 android:layout_toLeftOf="@+id/tv_all_account_arrow" 60 android:gravity="center" 61 android:text="全部订单" 62 android:textColor="@android:color/darker_gray" /> 63 64 <com.joanzapata.iconify.widget.IconTextView 65 android:id="@+id/tv_all_account_arrow" 66 android:layout_width="wrap_content" 67 android:layout_height="match_parent" 68 android:layout_alignParentEnd="true" 69 android:layout_alignParentRight="true" 70 android:layout_alignParentTop="true" 71 android:layout_marginLeft="10dp" 72 android:gravity="center" 73 android:text="{fa-chevron-right}" 74 android:textColor="@android:color/darker_gray" /> 75 76 </RelativeLayout> 77 78 <LinearLayout 79 android:layout_width="match_parent" 80 android:layout_height="80dp" 81 android:background="@android:color/white" 82 android:baselineAligned="true" 83 android:orientation="horizontal"> 84 85 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 86 android:id="@+id/ll_pay" 87 android:layout_width="0dp" 88 android:layout_height="match_parent" 89 android:layout_weight="1" 90 android:gravity="center" 91 android:orientation="vertical"> 92 93 <com.joanzapata.iconify.widget.IconTextView 94 android:layout_width="30dp" 95 android:layout_height="30dp" 96 android:layout_gravity="center_horizontal" 97 android:gravity="center" 98 android:text="{fa-credit-card}" 99 android:textSize="20sp" /> 100 101 <TextView 102 android:layout_width="wrap_content" 103 android:layout_height="wrap_content" 104 android:layout_gravity="center_horizontal" 105 android:layout_marginTop="5dp" 106 android:gravity="center" 107 android:text="待付款" 108 android:textSize="10sp" /> 109 110 </LinearLayout> 111 112 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 113 android:id="@+id/ll_receive" 114 android:layout_width="0dp" 115 android:layout_height="match_parent" 116 android:layout_weight="1" 117 android:gravity="center" 118 android:orientation="vertical"> 119 120 <com.joanzapata.iconify.widget.IconTextView 121 android:layout_width="30dp" 122 android:layout_height="30dp" 123 android:layout_gravity="center_horizontal" 124 android:gravity="center" 125 android:text="{fa-truck}" 126 android:textSize="20sp" /> 127 128 <TextView 129 android:id="@+id/textView" 130 android:layout_width="wrap_content" 131 android:layout_height="wrap_content" 132 android:layout_gravity="center_horizontal" 133 android:layout_marginTop="5dp" 134 android:gravity="center" 135 android:text="待收货" 136 android:textSize="10sp" /> 137 138 </LinearLayout> 139 140 <LinearLayout 141 android:id="@+id/ll_evaluate" 142 android:layout_width="0dp" 143 android:layout_height="match_parent" 144 android:layout_weight="1" 145 android:gravity="center" 146 android:orientation="vertical"> 147 148 <com.joanzapata.iconify.widget.IconTextView 149 android:layout_width="30dp" 150 android:layout_height="30dp" 151 android:layout_gravity="center_horizontal" 152 android:gravity="center" 153 android:text="{fa-clone}" 154 android:textSize="20sp" /> 155 156 <TextView 157 android:layout_width="wrap_content" 158 android:layout_height="wrap_content" 159 android:layout_gravity="center_horizontal" 160 android:layout_marginTop="5dp" 161 android:gravity="center" 162 android:text="待评价" 163 android:textSize="10sp" /> 164 165 </LinearLayout> 166 167 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 168 android:id="@+id/ll_after_market" 169 android:layout_width="0dp" 170 android:layout_height="match_parent" 171 android:layout_weight="1" 172 android:gravity="center" 173 android:orientation="vertical"> 174 175 <com.joanzapata.iconify.widget.IconTextView 176 android:layout_width="30dp" 177 android:layout_height="30dp" 178 android:layout_gravity="center_horizontal" 179 android:gravity="center" 180 android:text="{fa-comments-o}" 181 android:textSize="20sp" /> 182 183 <TextView 184 android:layout_width="wrap_content" 185 android:layout_height="wrap_content" 186 android:layout_gravity="center_horizontal" 187 android:layout_marginTop="5dp" 188 android:gravity="center" 189 android:text="售后" 190 android:textSize="10sp" /> 191 192 </LinearLayout> 193 194 </LinearLayout> 195 196 <android.support.v7.widget.RecyclerView 197 android:id="@+id/rv_personal_setting" 198 android:layout_width="match_parent" 199 android:layout_height="match_parent" 200 android:layout_marginTop="20dp" /> 201 </LinearLayout> 202 203 </ScrollView>
【bean的书写】使用建造者模式
1 package com.flj.latte.ec.main.personal.list; 2 3 import android.widget.CompoundButton; 4 5 import com.chad.library.adapter.base.entity.MultiItemEntity; 6 import com.flj.latte.delegates.LatteDelegate; 7 8 9 public class ListBean implements MultiItemEntity { 10 11 private int mItemType = 0; 12 private String mImageUrl = null; //头像的地址; 13 private String mText = null; //名称 14 private String mValue = null; 15 private int mId = 0; 16 private LatteDelegate mDelegate = null; 17 // 其中存在checkbox的选择,需要设置一个listener; 18 private CompoundButton.OnCheckedChangeListener mOnCheckedChangeListener = null; 19 20 public ListBean(int mItemType, String mImageUrl, String mText, String mValue, int mId, LatteDelegate mDelegate, CompoundButton.OnCheckedChangeListener mOnCheckedChangeListener) { 21 this.mItemType = mItemType; 22 this.mImageUrl = mImageUrl; 23 this.mText = mText; 24 this.mValue = mValue; 25 this.mId = mId; 26 this.mDelegate = mDelegate; 27 this.mOnCheckedChangeListener = mOnCheckedChangeListener; 28 } 29 30 public String getImageUrl() { 31 32 return mImageUrl; 33 } 34 35 public String getText() { 36 if (mText == null) { 37 return ""; 38 } 39 return mText; 40 } 41 42 public String getValue() { 43 if (mValue == null) { 44 return ""; 45 } 46 return mValue; 47 } 48 49 public int getId() { 50 51 return mId; 52 } 53 54 public LatteDelegate getDelegate() { 55 return mDelegate; 56 } 57 58 public CompoundButton.OnCheckedChangeListener getmOnCheckedChangeListener() { 59 return mOnCheckedChangeListener; 60 } 61 62 @Override 63 public int getItemType() { 64 return mItemType; 65 } 66 67 public static final class Builder { 68 69 private int id = 0; 70 private int itemType = 0; 71 private String imageUrl = null; 72 private String text = null; 73 private String value = null; 74 private CompoundButton.OnCheckedChangeListener onCheckedChangeListener = null; 75 private LatteDelegate delegate = null; 76 77 public Builder setId(int id) { 78 this.id = id; 79 return this; 80 } 81 82 public Builder setItemType(int itemType) { 83 this.itemType = itemType; 84 return this; 85 } 86 87 public Builder setImageUrl(String imageUrl) { 88 this.imageUrl = imageUrl; 89 return this; 90 } 91 92 public Builder setText(String text) { 93 this.text = text; 94 return this; 95 } 96 97 public Builder setValue(String value) { 98 this.value = value; 99 return this; 100 } 101 102 public Builder setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener onCheckedChangeListener) { 103 this.onCheckedChangeListener = onCheckedChangeListener; 104 return this; 105 } 106 107 public Builder setDelegate(LatteDelegate delegate) { 108 this.delegate = delegate; 109 return this; 110 } 111 112 public ListBean build() { 113 return new ListBean(itemType, imageUrl, text, value, id, delegate, onCheckedChangeListener); 114 } 115 } 116 }
【适配器的添加】
【item的几种布局-1】带有箭头的item布局
1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="50dp" 5 android:layout_marginBottom="5dp" 6 android:background="@android:color/white"> 7 8 <android.support.v7.widget.AppCompatTextView 9 android:id="@+id/tv_arrow_text" 10 android:layout_width="wrap_content" 11 android:layout_height="match_parent" 12 android:layout_marginLeft="20dp" 13 android:gravity="center" /> 14 15 <android.support.v7.widget.AppCompatTextView 16 android:id="@+id/tv_arrow_value" 17 android:layout_width="wrap_content" 18 android:layout_height="match_parent" 19 android:layout_marginRight="10dp" 20 android:layout_toLeftOf="@+id/icon_arrow" 21 android:gravity="center" 22 android:text="未设置" /> 23 24 <com.joanzapata.iconify.widget.IconTextView 25 android:id="@+id/icon_arrow" 26 android:layout_width="wrap_content" 27 android:layout_height="match_parent" 28 android:layout_alignParentRight="true" 29 android:layout_marginRight="20dp" 30 android:gravity="center" 31 android:text="{fa-chevron-right}" /> 32 33 </RelativeLayout>
【设置个人中心的数据】当前写一些假的数据;
【新建type类】
2. 订单列表逻辑梳理与实现
【数据】根据不同的tag,不同的数据类型, 展示不同的数据;
【数据的转换】
【适配器的设置】
【orderList的layout】
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="match_parent" 5 android:layout_height="80dp" 6 android:layout_marginBottom="2dp" 7 android:background="@android:color/white" 8 android:orientation="horizontal"> 9 10 <FrameLayout 11 android:layout_width="0dp" 12 android:layout_height="match_parent" 13 android:layout_weight="1"> 14 15 <android.support.v7.widget.AppCompatImageView 16 android:id="@+id/image_order_list" 17 android:layout_width="70dp" 18 android:layout_height="70dp" 19 android:layout_gravity="center" 20 tools:ignore="RtlHardcoded" /> 21 </FrameLayout> 22 23 <LinearLayout 24 android:layout_width="0dp" 25 android:layout_height="match_parent" 26 android:layout_weight="2" 27 android:orientation="vertical"> 28 29 <android.support.v7.widget.AppCompatTextView 30 android:id="@+id/tv_order_list_title" 31 android:layout_width="match_parent" 32 android:layout_height="0dp" 33 android:layout_gravity="top" 34 android:layout_weight="1" 35 android:text="Title" 36 tools:ignore="NestedWeights" /> 37 38 <LinearLayout 39 android:layout_width="match_parent" 40 android:layout_height="0dp" 41 android:layout_weight="1" 42 android:orientation="horizontal"> 43 44 <android.support.v7.widget.AppCompatTextView 45 android:id="@+id/tv_order_list_price" 46 android:layout_width="0dp" 47 android:layout_height="match_parent" 48 android:layout_weight="1" 49 android:gravity="left|center" 50 android:text="price" 51 tools:ignore="RtlHardcoded" /> 52 53 <android.support.v7.widget.AppCompatTextView 54 android:id="@+id/tv_order_list_time" 55 android:layout_width="0dp" 56 android:layout_height="match_parent" 57 android:layout_weight="1" 58 android:gravity="left|center" 59 android:text="time" 60 tools:ignore="RtlHardcoded" /> 61 </LinearLayout> 62 </LinearLayout> 63 64 <com.joanzapata.iconify.widget.IconTextView 65 android:layout_width="0dp" 66 android:layout_height="match_parent" 67 android:layout_weight="1" 68 android:gravity="center" 69 android:text="{fa-chevron-right}" 70 android:textSize="18sp" 71 tools:ignore="HardcodedText" /> 72 73 </LinearLayout>
1 package com.flj.latte.ec.main.personal.order; 2 3 import android.annotation.SuppressLint; 4 import android.support.v7.widget.AppCompatImageView; 5 import android.support.v7.widget.AppCompatTextView; 6 7 import com.bumptech.glide.Glide; 8 import com.bumptech.glide.load.engine.DiskCacheStrategy; 9 import com.bumptech.glide.request.RequestOptions; 10 import com.diabin.latte.ec.R; 11 import com.flj.latte.ui.recycler.MultipleFields; 12 import com.flj.latte.ui.recycler.MultipleItemEntity; 13 import com.flj.latte.ui.recycler.MultipleRecyclerAdapter; 14 import com.flj.latte.ui.recycler.MultipleViewHolder; 15 16 import java.util.List; 17 18 public class OrderListAdapter extends MultipleRecyclerAdapter { 19 20 private static final RequestOptions OPTIONS = new RequestOptions() 21 .diskCacheStrategy(DiskCacheStrategy.ALL) 22 .centerCrop() 23 .dontAnimate(); 24 25 protected OrderListAdapter(List<MultipleItemEntity> data) { 26 super(data); 27 addItemType(OrderListItemType.ITEM_ORDER_LIST, R.layout.item_order_list); 28 } 29 30 @SuppressLint("SetTextI18n") 31 @Override 32 protected void convert(MultipleViewHolder holder, MultipleItemEntity entity) { 33 super.convert(holder, entity); 34 switch (holder.getItemViewType()) { 35 case OrderListItemType.ITEM_ORDER_LIST: 36 final AppCompatImageView imageView = holder.getView(R.id.image_order_list); 37 final AppCompatTextView title = holder.getView(R.id.tv_order_list_title); 38 final AppCompatTextView price = holder.getView(R.id.tv_order_list_price); 39 final AppCompatTextView time = holder.getView(R.id.tv_order_list_time); 40 41 final String titleVal = entity.getField(MultipleFields.TITLE); 42 final String timeVal = entity.getField(OrderItemFields.TIME); 43 final double priceVal = entity.getField(OrderItemFields.PRICE); 44 final String imageUrl = entity.getField(MultipleFields.IMAGE_URL); 45 46 Glide.with(mContext) 47 .load(imageUrl) 48 .apply(OPTIONS) 49 .into(imageView); 50 51 title.setText(titleVal); 52 price.setText("价格:" + String.valueOf(priceVal)); 53 time.setText("时间:" + timeVal); 54 break; 55 default: 56 break; 57 } 58 } 59 }
【订单页面的布局】
【对recycleView数据的填充】
【图片加载的设置】
【bug】time的修复
3. 个人信息的更新实现
3.1 个人信息页面的布局
1 <?xml version="1.0" encoding="utf-8"?> 2 <android.support.v7.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:background="#f5f5f5" 6 android:orientation="vertical"> 7 8 <android.support.v7.widget.Toolbar 9 android:background="@android:color/holo_orange_dark" 10 android:layout_width="match_parent" 11 android:layout_height="wrap_content" /> 12 13 <android.support.v7.widget.RecyclerView 14 android:id="@+id/rv_user_profile" 15 android:layout_width="match_parent" 16 android:layout_height="match_parent" /> 17 18 </android.support.v7.widget.LinearLayoutCompat>
【对于头像的设置和处理】处理姓名、性别还有头像的修改等等;
【头像事件的绑定】
3.3 数据的转化
【UI的绑定】
【源码】com.flj.latte.ec.main.personal.profile.UserProfileDelegate
1 package com.flj.latte.ec.main.personal.profile; 2 3 import android.os.Bundle; 4 import android.support.annotation.NonNull; 5 import android.support.annotation.Nullable; 6 import android.support.v7.widget.LinearLayoutManager; 7 import android.support.v7.widget.RecyclerView; 8 import android.view.View; 9 10 import com.diabin.latte.ec.R; 11 import com.diabin.latte.ec.R2; 12 import com.flj.latte.delegates.LatteDelegate; 13 import com.flj.latte.ec.main.personal.list.ListAdapter; 14 import com.flj.latte.ec.main.personal.list.ListBean; 15 import com.flj.latte.ec.main.personal.list.ListItemType; 16 import com.flj.latte.ec.main.personal.settings.NameDelegate; 17 18 import java.util.ArrayList; 19 import java.util.List; 20 21 import butterknife.BindView; 22 23 24 public class UserProfileDelegate extends LatteDelegate { 25 26 @BindView(R2.id.rv_user_profile) 27 RecyclerView mRecyclerView = null; 28 29 @Override 30 public Object setLayout() { 31 return R.layout.delegate_user_profile; 32 } 33 //尽量都使用动态的方式,不要在xml中写死; 34 @Override 35 public void onBindView(@Nullable Bundle savedInstanceState, @NonNull View rootView) { 36 final ListBean image = new ListBean.Builder() 37 .setItemType(ListItemType.ITEM_AVATAR) 38 .setId(1) 39 .setImageUrl("http://i9.qhimg.com/t017d891ca365ef60b5.jpg") 40 .build(); 41 42 final ListBean name = new ListBean.Builder() 43 .setItemType(ListItemType.ITEM_NORMAL) 44 .setId(2) 45 .setText("姓名") 46 .setDelegate(new NameDelegate()) 47 .setValue("未设置姓名") 48 .build(); 49 50 final ListBean gender = new ListBean.Builder() 51 .setItemType(ListItemType.ITEM_NORMAL) 52 .setId(3) 53 .setText("性别") 54 .setValue("未设置性别") 55 .build(); 56 57 final ListBean birth = new ListBean.Builder() 58 .setItemType(ListItemType.ITEM_NORMAL) 59 .setId(4) 60 .setText("生日") 61 .setValue("未设置生日") 62 .build(); 63 64 final List<ListBean> data = new ArrayList<>(); 65 data.add(image); 66 data.add(name); 67 data.add(gender); 68 data.add(birth); 69 } 70 }
5.3 图片库中图片选择事件的处理
【请求码的书写】
【调用类的书写】
【动态权限的处理】
【增加权限】
【调用】
5.4 相机拍照之后的剪裁
【配置清单】官方提供的;
【增加回调图片进行剪裁之后并保存】
6.图片上传和更新逻辑实现
【最后得到的图像的处理】上传到服务器并且可以设置本地的头像;
【设置本地的头像】
【效果】本地的头像已经发生了改变;
【上传至服务器】
【剪裁之后进行了服务器的数据上传】
【说明】对于姓名和性别也是一样的道理;此处没有实现
7.收货地址管理功能实现
【说明】收货地址使用的是recyclerView;
7.1【收货地址数据的转化】
7.2【数据适配器的完成】
【item布局】
1 <?xml version="1.0" encoding="utf-8"?> 2 <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" //此处使用的cardView 3 xmlns:card_view="http://schemas.android.com/apk/res-auto" 4 android:layout_width="match_parent" 5 android:layout_height="140dp" 6 android:layout_gravity="center" 7 card_view:cardBackgroundColor="@android:color/white" 8 card_view:cardCornerRadius="6dp" 9 card_view:cardElevation="3dp" 10 card_view:cardUseCompatPadding="true"> 11 12 <android.support.v7.widget.LinearLayoutCompat 13 android:layout_width="match_parent" 14 android:layout_height="match_parent" 15 android:orientation="vertical"> 16 17 <RelativeLayout 18 android:layout_width="match_parent" 19 android:layout_height="0dp" 20 android:layout_weight="1" 21 android:orientation="horizontal"> 22 23 <android.support.v7.widget.AppCompatTextView 24 android:id="@+id/tv_address_name" 25 android:layout_width="wrap_content" 26 android:layout_height="wrap_content" 27 android:layout_alignParentLeft="true" 28 android:layout_centerVertical="true" 29 android:layout_marginLeft="20dp" 30 android:text="姓名" 31 android:textColor="@color/app_main" /> 32 33 <android.support.v7.widget.AppCompatTextView 34 android:id="@+id/tv_address_phone" 35 android:layout_width="wrap_content" 36 android:layout_height="wrap_content" 37 android:layout_centerInParent="true" 38 android:text="电话" 39 android:textColor="@color/we_chat_black" /> 40 41 <android.support.v7.widget.AppCompatTextView 42 android:id="@+id/tv_address_delete" 43 android:layout_width="wrap_content" 44 android:layout_height="wrap_content" 45 android:layout_alignParentRight="true" 46 android:layout_centerVertical="true" 47 android:layout_marginRight="20dp" 48 android:text="删除" 49 android:textColor="@android:color/darker_gray" /> 50 51 </RelativeLayout> 52 53 <View 54 android:layout_width="match_parent" 55 android:layout_height="1dp" 56 android:layout_marginLeft="10dp" 57 android:layout_marginRight="10dp" 58 android:background="@color/app_background" /> 59 60 <RelativeLayout 61 android:layout_width="match_parent" 62 android:layout_height="0dp" 63 android:layout_weight="2"> 64 65 <android.support.v7.widget.AppCompatTextView 66 android:id="@+id/tv_address_address" 67 android:layout_width="wrap_content" 68 android:layout_height="wrap_content" 69 android:layout_alignParentLeft="true" 70 android:layout_centerVertical="true" 71 android:layout_marginLeft="20dp" 72 android:gravity="center_vertical|left" 73 android:textColor="@color/we_chat_black" 74 android:textSize="18sp" /> 75 76 </RelativeLayout> 77 </android.support.v7.widget.LinearLayoutCompat> 78 </android.support.v7.widget.CardView>
【完善】
1 package com.flj.latte.ec.main.personal.address; 2 3 import android.support.v7.widget.AppCompatTextView; 4 import android.view.View; 5 6 import com.diabin.latte.ec.R; 7 import com.flj.latte.net.RestClient; 8 import com.flj.latte.net.callback.ISuccess; 9 import com.flj.latte.ui.recycler.MultipleFields; 10 import com.flj.latte.ui.recycler.MultipleItemEntity; 11 import com.flj.latte.ui.recycler.MultipleRecyclerAdapter; 12 import com.flj.latte.ui.recycler.MultipleViewHolder; 13 14 import java.util.List; 15 16 17 public class AddressAdapter extends MultipleRecyclerAdapter { 18 19 protected AddressAdapter(List<MultipleItemEntity> data) { 20 super(data); 21 addItemType(AddressItemType.ITEM_ADDRESS, R.layout.item_address); 22 } 23 24 @Override 25 protected void convert(final MultipleViewHolder holder, MultipleItemEntity entity) { 26 super.convert(holder, entity); 27 switch (holder.getItemViewType()) { 28 case AddressItemType.ITEM_ADDRESS: 29 final String name = entity.getField(MultipleFields.NAME); 30 final String phone = entity.getField(AddressItemFields.PHONE); 31 final String address = entity.getField(AddressItemFields.ADDRESS); 32 final boolean isDefault = entity.getField(MultipleFields.TAG); 33 final int id = entity.getField(MultipleFields.ID); 34 35 final AppCompatTextView nameText = holder.getView(R.id.tv_address_name); 36 final AppCompatTextView phoneText = holder.getView(R.id.tv_address_phone); 37 final AppCompatTextView addressText = holder.getView(R.id.tv_address_address); 38 final AppCompatTextView deleteTextView = holder.getView(R.id.tv_address_delete); 39 deleteTextView.setOnClickListener(new View.OnClickListener() { 40 @Override 41 public void onClick(View v) { 42 RestClient.builder() 43 .url("address.php") 44 .params("id", id) 45 .success(new ISuccess() { 46 @Override 47 public void onSuccess(String response) { 48 remove(holder.getLayoutPosition()); 49 } 50 }) 51 .build() 52 .post(); 53 } 54 }); 55 56 nameText.setText(name); 57 phoneText.setText(phone); 58 addressText.setText(address); 59 break; 60 default: 61 break; 62 } 63 } 64 }
7.3 收货地址delegate创建
【布局】
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical"> 6 7 <android.support.v7.widget.Toolbar 8 android:layout_width="match_parent" 9 android:layout_height="?attr/actionBarSize" 10 android:background="@android:color/holo_orange_dark"> 11 12 <RelativeLayout 13 android:layout_width="match_parent" 14 android:layout_height="match_parent"> 15 16 <android.support.v7.widget.AppCompatTextView 17 android:layout_width="match_parent" 18 android:layout_height="match_parent" 19 android:layout_centerInParent="true" 20 android:gravity="center" 21 android:text="地址管理" 22 android:textColor="@android:color/white" 23 android:textSize="20sp" /> 24 25 <com.joanzapata.iconify.widget.IconTextView 26 android:id="@+id/icon_address_add" 27 android:layout_width="wrap_content" 28 android:layout_height="match_parent" 29 android:layout_alignParentRight="true" 30 android:layout_marginRight="20dp" 31 android:gravity="center" 32 android:text="{fa-plus-square-o}" 33 android:textColor="@android:color/white" 34 android:textSize="30sp" /> 35 36 </RelativeLayout> 37 38 </android.support.v7.widget.Toolbar> 39 40 <android.support.v7.widget.RecyclerView 41 android:id="@+id/rv_address" 42 android:layout_width="match_parent" 43 android:layout_height="match_parent" /> 44 45 </LinearLayout>
1 package com.flj.latte.ec.main.personal.address; 2 import android.os.Bundle; 3 import android.support.annotation.NonNull; 4 import android.support.annotation.Nullable; 5 import android.support.v7.widget.LinearLayoutManager; 6 import android.support.v7.widget.RecyclerView; 7 import android.view.View; 8 import com.diabin.latte.ec.R; 9 import com.diabin.latte.ec.R2; 10 import com.flj.latte.delegates.LatteDelegate; 11 import com.flj.latte.net.RestClient; 12 import com.flj.latte.net.callback.ISuccess; 13 import com.flj.latte.ui.recycler.MultipleItemEntity; 14 import com.flj.latte.util.log.LatteLogger; 15 import java.util.List; 16 import butterknife.BindView; 17 18 19 public class AddressDelegate extends LatteDelegate implements ISuccess { 20 21 @BindView(R2.id.rv_address) 22 RecyclerView mRecyclerView = null; 23 24 @Override 25 public Object setLayout() { 26 return R.layout.delegate_address; 27 } 28 29 @Override 30 public void onBindView(@Nullable Bundle savedInstanceState, @NonNull View rootView) { 31 RestClient.builder() 32 .url("address.php") 33 .loader(getContext()) 34 .success(this) 35 .build() 36 .get(); 37 } 38 39 @Override 40 public void onSuccess(String response) { 41 LatteLogger.d("AddressDelegate", response); 42 final LinearLayoutManager manager = new LinearLayoutManager(getContext()); 43 mRecyclerView.setLayoutManager(manager); 44 final List<MultipleItemEntity> data = 45 new AddressDataConverter().setJsonData(response).convert(); 46 final AddressAdapter addressAdapter = new AddressAdapter(data); 47 mRecyclerView.setAdapter(addressAdapter); 48 } 49 }
7.4 点击事件的进入
1 package com.flj.latte.ec.main.personal; 2 3 import android.view.View; 4 import com.chad.library.adapter.base.BaseQuickAdapter; 5 import com.chad.library.adapter.base.listener.SimpleClickListener; 6 import com.flj.latte.delegates.LatteDelegate; 7 import com.flj.latte.ec.main.personal.list.ListBean; 8 9 public class PersonalClickListener extends SimpleClickListener { 10 11 private final LatteDelegate DELEGATE; 12 13 public PersonalClickListener(LatteDelegate delegate) { 14 this.DELEGATE = delegate; 15 } 16 17 @Override 18 public void onItemClick(BaseQuickAdapter adapter, View view, int position) { 19 final ListBean bean = (ListBean) baseQuickAdapter.getData().get(position); 20 int id = bean.getId(); 21 switch (id) { 22 case 1: 23 DELEGATE.getParentDelegate().getSupportDelegate().start(bean.getDelegate()); 24 break; 25 case 2: 26 DELEGATE.getParentDelegate().getSupportDelegate().start(bean.getDelegate()); 27 break; 28 default: 29 break; 30 } 31 } 32 33 @Override 34 public void onItemLongClick(BaseQuickAdapter adapter, View view, int position) { 35 36 } 37 38 @Override 39 public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) { 40 41 } 42 43 @Override 44 public void onItemChildLongClick(BaseQuickAdapter adapter, View view, int position) { 45 46 } 47 }
7.5 删除键功能实现
8.基于极光推送的消息推送