亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

XrecyclerView實現加載數據和切換不同布局

2019-10-21 21:33:17
字體:
來源:轉載
供稿:網友

本文實例為大家分享了XrecyclerView實現加載數據和切換不同布局,供大家參考,具體內容如下

compile 'com.jcodecraeer:xrecyclerview:1.3.2'//XrecyclerView

顯示界面

<?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" tools:context="wangxuewei.bwie.com.wangxuewei1510c2071219.MainActivity"> <RelativeLayout  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:gravity="center_vertical">  <TextView   android:layout_width="match_parent"   android:layout_height="wrap_content"   android:layout_margin="10dp"   android:gravity="center"   android:text="搜索商品" />  <ImageView   android:id="@+id/cutImg"   android:layout_width="30dp"   android:layout_height="30dp"   android:layout_alignParentRight="true"   android:layout_margin="7dp"   android:src="@drawable/grid_icon" /> </RelativeLayout> <TextView  android:layout_width="match_parent"  android:layout_height="2dp"  android:background="#c0c0c0" /> <LinearLayout  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:layout_margin="10dp"  android:orientation="horizontal">  <EditText   android:id="@+id/editKey"   android:layout_width="0dp"   android:layout_height="wrap_content"   android:layout_weight="1"   android:hint="請輸入關鍵字" />  <Button   android:id="@+id/btnSearch"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:text="搜索" /> </LinearLayout> <TextView  android:layout_width="match_parent"  android:layout_height="2dp"  android:background="#c0c0c0" /> <com.jcodecraeer.xrecyclerview.XRecyclerView  android:id="@+id/xrecyclerview"  android:layout_width="match_parent"  android:layout_height="wrap_content"></com.jcodecraeer.xrecyclerview.XRecyclerView></LinearLayout>

網格布局條目顯示樣式

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:orientation="vertical"> <ImageView  android:id="@+id/GoodsIcon"  android:layout_width="80dp"  android:layout_height="80dp" /> <TextView  android:id="@+id/title"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_margin="10dp"  android:text="asdasd" /> <TextView  android:id="@+id/price"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:text="asdasd" /> <TextView  android:id="@+id/bargainPrice"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_marginLeft="5dp"  android:text="asdasd"  android:textColor="#f00" /></LinearLayout>

列表布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" android:orientation="horizontal"> <ImageView  android:id="@+id/GoodsIcon"  android:layout_width="80dp"  android:layout_height="80dp" /> <LinearLayout  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:orientation="vertical">  <TextView   android:id="@+id/title"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:layout_margin="10dp"   android:text="asdasd" />  <LinearLayout   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:layout_margin="10dp"   android:orientation="horizontal">   <TextView    android:id="@+id/price"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="asdasd" />   <TextView    android:id="@+id/bargainPrice"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_marginLeft="5dp"    android:text="asdasd"    android:textColor="#f00" />  </LinearLayout> </LinearLayout></LinearLayout>

主界面

public class MainActivity extends AppCompatActivity implements ShopSearchViewAPI, View.OnClickListener { private ImageView cutImg; private Button btnSearch; private List<GoodsBean.DataBean> list = new ArrayList<>(); private XRecyclerView xR; private EditText editKey; private int flag = 1; private MyAdapter myAdapter; private int i = 1; private String string = "手機"; private String name; @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  //加載控件  initView();  getData("手機", "1");  //設置可上拉  xR.setPullRefreshEnabled(true);  xR.setLoadingMoreEnabled(true);  //設置上拉下拉樣式  xR.setRefreshProgressStyle(ProgressStyle.BallSpinFadeLoader);  xR.setLaodingMoreProgressStyle(ProgressStyle.BallClipRotate);  clickListener();  xR.setLoadingListener(new XRecyclerView.LoadingListener() {   @Override   public void onRefresh() {    i = 1;    list.clear();    getData(string, "" + i);    xR.refreshComplete();   }   @Override   public void onLoadMore() {    i++;    getData(string, "" + i);    xR.loadMoreComplete();   }  }); } public void getData(String key, String page) {  ShopSearchPresenter shopSearchPresenter = new ShopSearchPresenter(this, this);  shopSearchPresenter.getGoodsData("http://120.27.23.105/product/searchProducts", key, page); } private void clickListener() {  cutImg.setOnClickListener(this);  btnSearch.setOnClickListener(this); } private void initView() {  cutImg = (ImageView) findViewById(R.id.cutImg);  btnSearch = (Button) findViewById(R.id.btnSearch);  xR = (XRecyclerView) findViewById(R.id.xrecyclerview);  editKey = (EditText) findViewById(R.id.editKey); } @Override public void getSuccess(Object o) {  GoodsBean o1 = (GoodsBean) o;  List<GoodsBean.DataBean> data = o1.getData();  list.addAll(data);  setMyAdapter(flag); } @Override public void getFailed(Exception e) { } @Override public void onClick(View v) {  switch (v.getId()) {   case R.id.cutImg:    if (flag == 1) {     cutImg.setImageResource(R.drawable.lv_icon);     flag = 2;    } else {     cutImg.setImageResource(R.drawable.grid_icon);     flag = 1;    }    setMyAdapter(flag);    break;   case R.id.btnSearch:    list.clear();    name = editKey.getText().toString();    string = name;    getData(string, "1");    break;  } } public void setMyAdapter(int f) {  if (f == 1) {   // 線性布局管理器 VERTICAL默認樣式/豎向顯示  第三個參數是數據是否到過來顯示   LinearLayoutManager manager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);   //添加布局管理器   xR.setLayoutManager(manager);   myAdapter = new MyAdapter(list, this, f);   xR.setAdapter(myAdapter);  } else if (f == 2) {   // 線性布局管理器 VERTICAL默認樣式/豎向顯示  第三個參數是數據是否到過來顯示   GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2, GridLayoutManager.VERTICAL, false);   //添加布局管理器   xR.setLayoutManager(gridLayoutManager);   myAdapter = new MyAdapter(list, this, f);   xR.setAdapter(myAdapter);  } }}

MyAdapter

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private List<GoodsBean.DataBean> list; private Context context; private int flag = 1; private View inflate; public MyAdapter(List<GoodsBean.DataBean> list, Context context, int flag) {  this.list = list;  this.context = context;  this.flag = flag; } @Override public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {  if (flag == 1) {   inflate = LayoutInflater.from(context).inflate(R.layout.lvitem, parent, false);  } else if (flag == 2) {   inflate = LayoutInflater.from(context).inflate(R.layout.griditem, parent, false);  }  MyViewHolder myViewHolder = new MyViewHolder(inflate);  return myViewHolder; } @Override public void onBindViewHolder(MyAdapter.MyViewHolder holder, int position) {  String images = list.get(position).getImages();  String[] split = images.split("//|");  Glide.with(context).load(split[0]).into(holder.icon);  holder.title.setText(list.get(position).getTitle());  holder.bargainPrice.setText("折扣價:" + list.get(position).getBargainPrice() + "");  holder.price.setText("原價:" + list.get(position).getPrice());  holder.price.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); } @Override public int getItemCount() {  return list != null ? list.size() : 0; } class MyViewHolder extends RecyclerView.ViewHolder {  private ImageView icon;  private TextView title;  private TextView bargainPrice;  private TextView price;  public MyViewHolder(View itemView) {   super(itemView);   icon = (ImageView) itemView.findViewById(R.id.GoodsIcon);   bargainPrice = (TextView) itemView.findViewById(R.id.bargainPrice);   price = (TextView) itemView.findViewById(R.id.price);  } }}

ShopSearchModle

public class ShopSearchModle { public void getData(String url, Map<String, String> map, final ShopSearchPresenterAPI shopSearchPresenterAPI) {  HttpUtils.getInstance().get(url, map, new CallBack() {   @Override   public void onSuccess(Object o) {    shopSearchPresenterAPI.success(o);   }   @Override   public void onFailed(Exception e) {    shopSearchPresenterAPI.failed(e);   }  }, GoodsBean.class); }}

ShopSearchPresenter

public class ShopSearchPresenter { private ShopSearchViewAPI shopSearchViewAPI; private Context context; private final ShopSearchModle shopSearchModle; public ShopSearchPresenter(ShopSearchViewAPI shopSearchViewAPI, Context context) {  this.shopSearchViewAPI = shopSearchViewAPI;  this.context = context;  shopSearchModle = new ShopSearchModle(); } public void getGoodsData(String url, String keywords, String page) {  Map<String, String> map = new HashMap<>();  map.put("keywords", keywords);  map.put("page", page);  shopSearchModle.getData(url, map, new ShopSearchPresenterAPI() {   @Override   public void success(Object o) {    shopSearchViewAPI.getSuccess(o);   }   @Override   public void failed(Exception e) {    shopSearchViewAPI.getFailed(e);   }  }); }}

ShopSearchPresenterAPI

public interface ShopSearchPresenterAPI { void success(Object o); void failed(Exception e);}

重點內容

 

package wangxuewei.bwie.com.wangxuewei1510c2071219;/** * Created by jim on 2017/12/19. */public interface ShopSearchViewAPI { void getSuccess(Object o); void getFailed(Exception e);}

HttpUtils

public class HttpUtils { private static volatile HttpUtils instance; private static Handler handler = new Handler(); private HttpUtils() { } public static HttpUtils getInstance() {  if (instance == null) {   synchronized (HttpUtils.class) {    if (instance == null) {     instance = new HttpUtils();    }   }  }  return instance; } //get請求 public void get(String url, Map<String, String> map, final CallBack callBack, final Class c) {  //對url和參數做拼接處理  StringBuffer stringBuffer = new StringBuffer();  stringBuffer.append(url);  //判斷是否存在? if中是存在  if (stringBuffer.indexOf("?") != -1) {   //判斷?是否在最后一位 if中是不在最后一位   if (stringBuffer.indexOf("?") != stringBuffer.length() - 1) {    stringBuffer.append("&");   }  } else {   stringBuffer.append("?");  }  for (Map.Entry<String, String> entry : map.entrySet()) {   stringBuffer.append(entry.getKey())     .append("=")     .append(entry.getValue())     .append("&");  }  //判斷是否存在& if中是存在  if (stringBuffer.indexOf("&") != -1) {   stringBuffer.deleteCharAt(stringBuffer.lastIndexOf("&"));  }  //1:創建OkHttpClient對象  OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new Logger()).build();  //2:創建Request對象  final Request request = new Request.Builder()    .get()    .url(stringBuffer.toString())    .build();  //3:創建Call對象  Call call = okHttpClient.newCall(request);  //4:請求網絡  call.enqueue(new Callback() {   //請求失敗   @Override   public void onFailure(Call call, final IOException e) {    handler.post(new Runnable() {     @Override     public void run() {      callBack.onFailed(e);     }    });   }   //請求成功   @Override   public void onResponse(Call call, Response response) throws IOException {    String result = response.body().string();    //拿到數據解析    final Object o = new Gson().fromJson(result, c);    //當前是在子線程,回到主線程中    handler.post(new Runnable() {     @Override     public void run() {      //回調      callBack.onSuccess(o);     }    });   }  }); } //post請求 public void post(String url, Map<String, String> map, final CallBack callBack, final Class c) {  //1:創建OkHttpClient對象  OkHttpClient okHttpClient = new OkHttpClient();  //2:提供post請求需要的body對象  FormBody.Builder builder = new FormBody.Builder();  for (Map.Entry<String, String> entry : map.entrySet()) {   builder.add(entry.getKey(), entry.getValue());  }  FormBody body = builder.build();  //3:創建Request對象  final Request request = new Request.Builder()    .post(body)    .url(url)    .build();  //4:創建Call對象  Call call = okHttpClient.newCall(request);  //5:請求網絡  call.enqueue(new Callback() {   //請求失敗   @Override   public void onFailure(Call call, final IOException e) {    handler.post(new Runnable() {     @Override     public void run() {      callBack.onFailed(e);     }    });   }   //請求成功   @Override   public void onResponse(Call call, Response response) throws IOException {    String result = response.body().string();    //拿到數據解析    final Object o = new Gson().fromJson(result, c);    //當前是在子線程,回到主線程中    handler.post(new Runnable() {     @Override     public void run() {      //回調      callBack.onSuccess(o);     }    });   }  }); }}

重點內容

public interface CallBack { void onSuccess(Object o); void onFailed(Exception e);}

Logger

public class Logger implements Interceptor { @Override public Response intercept(Chain chain) throws IOException {  Request original = chain.request();  HttpUrl url = original.url().newBuilder()    .addQueryParameter("source", "android")    .build();  //添加請求頭  Request request = original.newBuilder()    .url(url)    .build();  return chain.proceed(request); }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲欧美日韩一区二区| 色爱av美腿丝袜综合粉嫩av| 日本久久91av| 色婷婷亚洲mv天堂mv在影片| 黄色91在线观看| 国产xxx69麻豆国语对白| 亚洲性av网站| 亚洲老头老太hd| 国产亚洲人成网站在线观看| 一本色道久久综合亚洲精品小说| 中文字幕亚洲一区在线观看| 亚洲一区免费网站| 2020欧美日韩在线视频| 色妞一区二区三区| 国产一区二区三区中文| 亚洲欧美制服另类日韩| 热久久视久久精品18亚洲精品| 久久久久久久久久国产精品| 疯狂欧美牲乱大交777| 亚洲国产精彩中文乱码av在线播放| 国产深夜精品福利| 久久福利网址导航| 日韩欧美精品中文字幕| 日韩欧美在线观看| 亚洲自拍偷拍视频| 欧美大尺度在线观看| 久久久久久久久91| 国产丝袜精品视频| 国产精品中文字幕在线观看| 懂色aⅴ精品一区二区三区蜜月| 欧美亚洲成人网| 欧美激情一区二区三区久久久| 精品久久久久久久久久久| 揄拍成人国产精品视频| 成年无码av片在线| 亚洲视频在线观看网站| 亚洲三级av在线| 亚洲精品999| 久久成人国产精品| 最近的2019中文字幕免费一页| 91精品国产91久久久久久最新| 久久久电影免费观看完整版| 国产一区二区av| 日韩av免费在线| 欧美性猛交xxx| 国产亚洲精品va在线观看| 日日骚久久av| 国产日韩欧美中文在线播放| 亚洲va欧美va在线观看| 久久人人爽人人爽爽久久| 中文字幕欧美国内| 九色成人免费视频| 国模精品系列视频| 成人黄色大片在线免费观看| 国产成人综合精品| 欧美日韩中文字幕在线视频| 国产美女被下药99| 久久精品91久久久久久再现| 91亚洲国产成人久久精品网站| 日韩在线观看免费| 色老头一区二区三区在线观看| 久久久久久久久中文字幕| 亚洲综合中文字幕在线| 日韩国产欧美精品在线| 国产欧美最新羞羞视频在线观看| www.日韩av.com| 韩国v欧美v日本v亚洲| 欧美一区二三区| 亚洲人成五月天| 欧美精品18videos性欧| 国产91热爆ts人妖在线| 日韩欧美在线视频日韩欧美在线视频| 在线国产精品视频| 丁香五六月婷婷久久激情| 91精品国产免费久久久久久| 亚洲成人精品视频在线观看| 亚洲精品mp4| 亚洲日韩中文字幕| 欧美国产日韩精品| 亚洲福利视频专区| 亚洲已满18点击进入在线看片| 在线观看欧美日韩国产| 国产精品大片wwwwww| 国产91露脸中文字幕在线| 久久精品欧美视频| 视频一区视频二区国产精品| 久久亚洲国产成人| 国产亚洲精品美女久久久久| 在线精品播放av| 黄色成人av在线| 九九热精品视频| 91久久嫩草影院一区二区| 日韩美女视频中文字幕| 国产精品极品尤物在线观看| 伊人久久久久久久久久| 国产精品美女999| 亚洲国产精品人久久电影| 欧美激情精品久久久| 久久全球大尺度高清视频| 在线观看精品自拍私拍| 久热在线中文字幕色999舞| 国产精品久久久久9999| 亚洲欧美综合精品久久成人| 久久久久久久色| 人人做人人澡人人爽欧美| 久热爱精品视频线路一| 国模精品系列视频| 亚洲2020天天堂在线观看| 国产精品高潮呻吟久久av野狼| 日韩欧美国产骚| 91网站在线看| 69久久夜色精品国产7777| 亚洲黄色www| 亚洲欧美日韩第一区| 亚洲视频免费一区| 一本一本久久a久久精品综合小说| 欧美视频中文字幕在线| 久热精品视频在线免费观看| 国产成人jvid在线播放| 97视频在线观看网址| 欧美成人国产va精品日本一级| 国产精品一区二区久久国产| 亚洲成人亚洲激情| 这里只有精品视频在线| 亚洲欧美制服综合另类| 国产欧美va欧美va香蕉在| 97久久超碰福利国产精品…| 亚洲国产日韩欧美在线99| 国内精品久久久久久中文字幕| 97精品国产97久久久久久免费| 精品一区二区三区四区在线| 九九视频直播综合网| 亚洲欧美精品一区| 欧美精品久久久久久久久久| 亚洲欧洲视频在线| 免费97视频在线精品国自产拍| 久久久久久尹人网香蕉| 欧美极品美女视频网站在线观看免费| 狠狠躁天天躁日日躁欧美| 亚洲色图综合网| 亚洲天堂一区二区三区| 亚洲成人激情视频| 成人深夜直播免费观看| 日韩日本欧美亚洲| 亚洲国产精品人久久电影| 国产美女久久精品香蕉69| 日韩av在线导航| 国产精品一区二区三区毛片淫片| 欧美肥臀大乳一区二区免费视频| 亚洲精品成人av| 亚洲国产精久久久久久| 亚洲一区二区三区sesese| 在线视频欧美日韩精品| 日韩成人中文电影| 在线观看视频亚洲| 亚洲va久久久噜噜噜| 久久中文字幕在线视频| 欧美猛交ⅹxxx乱大交视频| 日韩亚洲国产中文字幕| 国产精品偷伦免费视频观看的| 久久久99免费视频| 成人欧美在线视频| 欧美在线不卡区| 中文日韩在线观看|