本文实例为大家分享了XrecyclerView实现加载数据和切换不同布局,供大家参考,具体内容如下

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

显示界面

<?  version=\"1.0\" encoding=\"utf-8\"?>
<LinearLayout  ns:android=\"http://schemas.android.com/apk/res/android\"
   ns:app=\"http://schemas.android.com/apk/res-auto\"
   ns: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>

网格布局条目显示样式

<?  version=\"1.0\" encoding=\"utf-8\"?>
<LinearLayout  ns: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/ \"
    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>

列表布局

<?  version=\"1.0\" encoding=\"utf-8\"?>
<LinearLayout  ns: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/ \"
      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. Listener {

  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  More() {
        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.set Listener(this);
    btnSearch.set Listener(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(  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  (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. .setText(list.get(position).get ());
    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  ;
    private TextView bargainPrice;
    private TextView price;

    public MyViewHolder(View itemView) {
      super(itemView);

      icon = (ImageView) itemView.findViewById(R.id.GoodsIcon);
        = (TextView) itemView.findViewById(R.id. );
      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(  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(  o) {
        shopSearchViewAPI.getSuccess(o);
      }

      @Override
      public void failed(Exception e) {
        shopSearchViewAPI.getFailed(e);
      }
    });
  }


}

ShopSearchPresenterAPI

public interface ShopSearchPresenterAPI {

  void success(  o);

  void failed(Exception e);


}

重点内容

package wangxuewei.bwie.com.wangxuewei1510c2071219;

/**
 * Created by jim on 2017/12/19.
 */

public interface ShopSearchViewAPI {

  void getSuccess(  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   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   o = new Gson().fromJson(result, c);
        //当前是在子线程,回到主线程中
        handler.post(new Runnable() {
          @Override
          public void run() {
            //回调
            callBack.onSuccess(o);
          }
        });
      }
    });
  }

}

重点内容

public interface CallBack {

  void onSuccess(  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);
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

收藏 打印