model包
GoodsAdapter
public class GoodsAdapter extends RecyclerView.Adapter{
public static final int TYPE_ONE_IMAGE = 0;
public static final int TYPE_TWO_IMAGE = 1;
private Context context;
private List<GoodsListBean.DataBean> data = new ArrayList<>();
public GoodsAdapter(Context context) {
this.context = context;
}
public void updateList(List<GoodsListBean.DataBean> data) {
this.data.clear();
addList(data);
notifyDataSetChanged();
}
public void addList(List<GoodsListBean.DataBean> data) {
this.data.addAll(data);
notifyDataSetChanged();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view;
RecyclerView.ViewHolder holder = null;
switch (viewType) {
case 0:
view = View.inflate(context, R.layout.item_goods_list, null);
holder = new GoodsViewHolder(view);
break;
case 1:
view = View.inflate(context, R.layout.item_goods_twolist, null);
holder = new GoodsTwoViewHolder(view);
}
return holder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
switch (getItemViewType(position)) {
case 0:
GoodsViewHolder holderOne = (GoodsViewHolder) holder;
String image = data.get(position).getImages();
String pic = image.split("\\|")[0];
holderOne.img.setImageURI(pic);
holderOne.title.setText(data.get(position).getTitle());
break;
case 1:
GoodsTwoViewHolder holdertwo = (GoodsTwoViewHolder) holder;
String images = data.get(position).getImages();
String pic_url = images.split("\\|")[0];
holdertwo.img.setImageURI(pic_url);
holdertwo.title.setText(data.get(position).getTitle());
}
}
@Override
public int getItemViewType(int position) {
if (position%2==0) {
return TYPE_TWO_IMAGE;
} else {
return TYPE_ONE_IMAGE;
}
}
@Override
public int getItemCount() {
return data.size();
}
class GoodsViewHolder extends RecyclerView.ViewHolder {
public TextView title;
public SimpleDraweeView img;
public GoodsViewHolder(View itemView) {
super(itemView);
title = itemView.findViewById(R.id.tv);
img = itemView.findViewById(R.id.img);
}
}
class GoodsTwoViewHolder extends RecyclerView.ViewHolder {
public TextView title;
public SimpleDraweeView img;
public GoodsTwoViewHolder(View itemView) {
super(itemView);
title = itemView.findViewById(R.id.tv);
img = itemView.findViewById(R.id.img);
}
}
}
GoodsModel
public class GoodsModel implements IModel {
@Override
public void getData(String pscid,String page, final IPresenter iPresenter) {
Map<String,String> params=new HashMap<>();
params.put("pscid",pscid);
OkHttpUtils okHttpUtils= OkHttpUtils.getInstance();
okHttpUtils.doPost(HttpConfig.GoodsListUrl, params, new OnFinishListener() {
@Override
public void onSuccess(String json) {
iPresenter.onSuccess(json);
}
@Override
public void onFailed(String error) {
iPresenter.onFailed(error);
}
});
}
}
IModel
public interface IModel {
void getData(String pscid,String page, IPresenter iPresenter);
}
MyApp
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
presenter包
GoodsPresenter
public class GoodsPresenter implements IPresenter {
private static final String TAG = "GoodsPresenter----";
private IView iView;
private GoodsModel goodsModel;
public GoodsPresenter(IView iView) {
this.iView = iView;
goodsModel=new GoodsModel();
}
@Override
public void getCarInfo(String pscid,String page) {
goodsModel.getData(pscid,page,this);
}
@Override
public void onSuccess(String json) {
Log.d(TAG, "onSuccess: "+json);
if(null!=iView){
Gson gson=new Gson();
GoodsListBean goodsListBean = gson.fromJson(json, GoodsListBean.class);
List<GoodsListBean.DataBean> data = goodsListBean.getData();
Log.d(TAG, "onSuccess: "+data);
iView.showDataToView(data);
}
}
@Override
public void onFailed(String error) {
if(null!=iView ){
Log.d(TAG, "onFailed: "+error);
}
}
@Override
public void onDestory() {
if(null!=iView){
iView=null;
}
}
}
IPresenter
public interface IPresenter {
void getCarInfo(String pscid,String page);
void onSuccess(String json);
void onFailed(String error);
void onDestory();
}
utils包
CommonInterceptor
public class CommonInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
String method = request.method();
if("GET".equals(method)){
String oldUrl = request.url().toString();
String newUrl = oldUrl + "&source=android";
request =new Request.Builder()
.url(newUrl)
.build();
}else if ("POST".equals(method)) {
String oldUrl = request.url().toString();
FormBody oldBody = (FormBody) request.body();
FormBody.Builder builder = new FormBody.Builder();
for (int i = 0; i < oldBody.size(); i++) {
String name = oldBody.name(i);
String value = oldBody.value(i);
builder.add(name, value);
}
builder.add("source", "android");
request=new Request.Builder()
.url(oldUrl)
.post(builder.build())
.build();
}
return chain.proceed(request);
}
}
HttpConfig
public class HttpConfig {
public final static String GoodsListUrl="https://www.zhaoapi.cn/product/getProducts";
}
OkHttpUtils
public class OkHttpUtils {
private static Handler handler=new Handler();
private static OkHttpUtils OK_HTTP_UTILS=null;
/**
* 得到OkHttpUtils实例对象
*
* @return
*/
private OkHttpUtils(){}
public static OkHttpUtils getInstance(){
if(null==OK_HTTP_UTILS){
synchronized (OkHttpUtils.class){
if(null==OK_HTTP_UTILS){
OK_HTTP_UTILS=new OkHttpUtils();
}
}
}
return OK_HTTP_UTILS;
}
/**
* Get请求
* @param onFinishListener
*/
public void doGet(String path, Map<String,String> map, final OnFinishListener onFinishListener){
StringBuffer sb = new StringBuffer();
sb.append(path);
if(sb.indexOf("?")!=-1){
if(sb.indexOf("?")!=sb.length()-1){
sb.append("&");
}
}else{
sb.append("?");
}
for(Map.Entry<String, String> entry:map.entrySet()){
sb.append(entry.getKey())
.append("=")
.append(entry.getValue())
.append("&");
}
if(sb.lastIndexOf("&")!=-1){
sb.deleteCharAt(sb.length()-1);
}
OkHttpClient okHttpClient=new OkHttpClient();
Request request=new Request.Builder()
.get()
.url(sb.toString())
.build();
Call call =okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
onFinishListener.onFailed(e.getMessage());
}
});
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
if(response.isSuccessful()){
final String result = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
onFinishListener.onSuccess(result);
}
});
}
}
});
}
/**
* post请求
*
* @param path
* @param map
* @param onFinishListener
*/
public void doPost(String path,Map<String,String> map,final OnFinishListener onFinishListener){
OkHttpClient okHttpClient=new OkHttpClient();
FormBody.Builder builder = new FormBody.Builder();
for(String key:map.keySet()){
builder.add(key,map.get(key));
}
Request request=new Request.Builder()
.post(builder.build())
.url(path)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
onFinishListener.onFailed(e.getMessage());
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()){
final String result = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
onFinishListener.onSuccess(result);
}
});
}
}
});
}
}
OnFinishListener
public interface OnFinishListener {
void onSuccess(String json);
void onFailed(String error);
}
view包
IView
public interface IView {
void showDataToView(List<GoodsListBean.DataBean> data);
}
MainActivity
public class MainActivity extends AppCompatActivity implements IView{
private static final String TAG ="MainActivity----" ;
private XRecyclerView xrcy;
private GoodsPresenter goodsPresenter;
private GoodsAdapter adapter;
private int pscid = 1;
private int page = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
xrcy = (XRecyclerView) findViewById(R.id.xrcy);
adapter = new GoodsAdapter(MainActivity.this);
xrcy.setAdapter(adapter);
xrcy.setLayoutManager(new LinearLayoutManager(MainActivity.this));
DividerItemDecoration dec = new DividerItemDecoration(MainActivity.this,DividerItemDecoration.VERTICAL);
xrcy.addItemDecoration(dec);
goodsPresenter = new GoodsPresenter(this);
goodsPresenter.getCarInfo("1",page+"");
if (pscid > 0) {
goodsPresenter.getCarInfo(pscid+"",page+"");
}
xrcy.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
page = 1;
goodsPresenter.getCarInfo(pscid+"",page+"");
}
@Override
public void onLoadMore() {
page++;
goodsPresenter.getCarInfo(pscid+"",page+"");
}
});
}
@Override
public void showDataToView(List<GoodsListBean.DataBean> data) {
Log.d(TAG, "showDataToView: "+data);
xrcy.refreshComplete();
xrcy.loadMoreComplete();
if (page > 1) {
adapter.addList(data);
} else {
adapter.updateList(data);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
goodsPresenter.onDestory();
}
}
bean包
GoodsListBean
public class GoodsListBean {
/**
* msg : 请求成功
* code : 0
* data : [{"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/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","itemtype":1,"pid":1,"price":118,"pscid":1,"salenum":0,"sellerid":17,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"},{"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/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","itemtype":1,"pid":2,"price":299,"pscid":1,"salenum":999,"sellerid":18,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"},{"bargainPrice":111.99,"createtime":"2017-10-03T23:53:28","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/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","itemtype":0,"pid":3,"price":198,"pscid":1,"salenum":1234,"sellerid":19,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"},{"bargainPrice":111.99,"createtime":"2017-10-14T21:48:08","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/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","itemtype":2,"pid":4,"price":999,"pscid":1,"salenum":356,"sellerid":20,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"},{"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/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","itemtype":1,"pid":5,"price":88.99,"pscid":1,"salenum":678,"sellerid":21,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"},{"bargainPrice":111.99,"createtime":"2017-10-03T23:53:28","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/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","itemtype":0,"pid":6,"price":7.99,"pscid":1,"salenum":234,"sellerid":22,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"},{"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/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","itemtype":1,"pid":7,"price":120.01,"pscid":1,"salenum":1266,"sellerid":23,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"},{"bargainPrice":111.99,"createtime":"2017-10-03T23:53:28","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/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","itemtype":0,"pid":8,"price":324,"pscid":1,"salenum":3000,"sellerid":1,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"},{"bargainPrice":111.99,"createtime":"2017-10-14T21:48:08","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/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","itemtype":2,"pid":9,"price":78.99,"pscid":1,"salenum":2356,"sellerid":2,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"},{"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/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","itemtype":1,"pid":10,"price":555.55,"pscid":1,"salenum":0,"sellerid":3,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"}]
* page : 1
*/
private String msg;
private String code;
private String page;
private List<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 String getPage() {
return page;
}
public void setPage(String page) {
this.page = page;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
/**
* bargainPrice : 111.99
* createtime : 2017-10-14T21:39:05
* detailUrl : https:
* images : https:
* itemtype : 1
* pid : 1
* price : 118.0
* pscid : 1
* salenum : 0
* sellerid : 17
* subhead : 每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下
* title : 北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g
*/
private double bargainPrice;
private String createtime;
private String detailUrl;
private String images;
private int itemtype;
private int pid;
private double price;
private int pscid;
private int salenum;
private int sellerid;
private String subhead;
private String title;
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 getImages() {
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(double price) {
this.price = price;
}
public int getPscid() {
return pscid;
}
public void setPscid(int pscid) {
this.pscid = pscid;
}
public int getSalenum() {
return salenum;
}
public void setSalenum(int salenum) {
this.salenum = salenum;
}
public int getSellerid() {
return sellerid;
}
public void setSellerid(int sellerid) {
this.sellerid = sellerid;
}
public String getSubhead() {
return subhead;
}
public void setSubhead(String subhead) {
this.subhead = subhead;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
}
activity_main.xml
<RelativeLayout 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"
tools:context="com.bwie.showlist.view.MainActivity">
<com.jcodecraeer.xrecyclerview.XRecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/xrcy">
</com.jcodecraeer.xrecyclerview.XRecyclerView>
</RelativeLayout>
item_goods_list.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:gravity="center"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:layout_width="50dp"
android:layout_height="50dp"
android:id="@+id/img"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:layout_gravity="center"
android:id="@+id/tv"/>
</LinearLayout>
item_goods_twolist.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
xmlns:app="http://schemas.android.com/apk/res-auto">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:id="@+id/tv"/>
<com.facebook.drawee.view.SimpleDraweeView
android:layout_width="50dp"
android:layout_height="50dp"
app:roundAsCircle="true"
android:id="@+id/img"/>
</LinearLayout>
依赖
compile 'com.jcodecraeer:xrecyclerview:1.5.2'
compile 'com.facebook.fresco:fresco:1.9.0'
compile 'com.facebook.fresco:animated-gif:+'
compile 'com.android.support:design:26.0.0-alpha1'
compile 'com.squareup.okhttp3:okhttp:3.9.0'
compile 'com.google.code.gson:gson:2.8.2'
清单文件注册app