首页 > 系统 > 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开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表