Recyclerviews的使用(瀑布流)
来源:互联网 发布:php通过ip获取经纬度 编辑:程序博客网 时间:2024/06/13 10:40
1.导入依赖
compile ‘com.android.support:recyclerview-v7:23.2.0’
2.给RecycleView创建适配器通过
package com.bwei.recyclerviews.adapter;import android.content.Context;import android.os.Handler;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import com.bwei.recyclerviews.R;import com.squareup.picasso.Picasso;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;/** * 1. 类的用途 * 2. @author forever * 3. @date 2017/9/6 16:06 */public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private Context context; private JSONArray data; public MyAdapter(Context context, JSONArray data) { this.context = context; this.data = data; } //创建view设置给ViewHolder @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, null); MyViewHolder holder = new MyViewHolder(view); return holder; } //绑定数据 @Override public void onBindViewHolder(MyViewHolder holder, int position) { try { JSONObject jsonObject = data.getJSONObject(position); String image_url = jsonObject.optString("image_url"); String title = jsonObject.getString("title"); holder.tv_title.setText(title); ViewGroup.LayoutParams layoutParams = holder.iv.getLayoutParams(); if (position == 0) { layoutParams.height = 200; } holder.iv.setLayoutParams(layoutParams); Picasso.with(context).load(image_url).placeholder(R.mipmap.ic_launcher).into(holder.iv); } catch (JSONException e) { e.printStackTrace(); } } //数据长度 @Override public int getItemCount() { return data.length(); } public class MyViewHolder extends RecyclerView.ViewHolder { private ImageView iv; private TextView tv_title; public MyViewHolder(View itemView) { super(itemView); iv = (ImageView) itemView.findViewById(R.id.iv); tv_title = (TextView) itemView.findViewById(R.id.tv_title); } }}
3.通过网络请求Json串进行解析添加适配器(实现三种样式)
package com.bwei.recyclerviews.activity;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.StaggeredGridLayoutManager;import com.bwei.recyclerviews.R;import com.bwei.recyclerviews.adapter.MyAdapter;import com.bwei.recyclerviews.utils.OkHttp3Utils;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import java.io.IOException;import okhttp3.Call;import okhttp3.Callback;import okhttp3.OkHttpClient;import okhttp3.Response;public class MainActivity extends AppCompatActivity { private RecyclerView rv; private String url = "http://result.eolinker.com/iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=one"; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: String json = (String) msg.obj; try { JSONObject jsonObject = new JSONObject(json); JSONArray data = jsonObject.getJSONArray("data"); //设置适配器 MyAdapter adapter = new MyAdapter(MainActivity.this, data); rv.setAdapter(adapter); } catch (JSONException e) { e.printStackTrace(); } break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //找控件 rv = (RecyclerView) findViewById(R.id.rv); //获取数据 getData();/** * 通过这三种方法进行三种不同的样式的显示 */ //设置LinearLayoutManager布局管理器 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); //设置GridLayoutManager布局管理器 GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2); //设置StaggeredGridLayoutManager布局管理器 StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL); //把布局管理器给RecyclerView rv.setLayoutManager(staggeredGridLayoutManager); } private void getData() { OkHttp3Utils.doGet(url, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { String json = response.body().string(); Message message = handler.obtainMessage(0, json); message.sendToTarget(); } }); }}
分装好包调包给RecycleView添加分割线
//添加华丽分割线 MyDecoration decoration = new MyDecoration(this, LinearLayoutManager.VERTICAL); rv.addItemDecoration(decoration); //给表格添加华丽的分割线 /* GridDivider gridDivider = new GridDivider(this, 2, Color.BLUE); rv.setLayoutManager(gridLayoutManager); rv.addItemDecoration(gridDivider);*/
阅读全文
2 0
- Recyclerviews的使用(瀑布流)
- RecycleView的使用(包括瀑布流)
- 带Header与Footer的RecyclerViews
- 带Header与Footer的RecyclerViews
- RecycleView的瀑布流的使用
- iOS 使用两个tableview的瀑布流
- CollectionView和layout的使用,瀑布流
- Android RecyclerView 的基本使用--瀑布流
- 使用RecyclerView展示瀑布流的效果
- UICollectionViewLayout的简单使用(简单瀑布流)
- 瀑布流和Banner效果的使用
- 网站错落有致的布局(瀑布流)
- 瀑布流的开发(转载)
- 瀑布流的DEMO
- 瀑布流的实现
- 瀑布流的认识
- 瀑布流的实现
- 特殊的瀑布流
- TP5分页使用方法,在使用paginate(10)后无法foreach得到的数据集合
- 关于性能优化之空间时间可靠性的辩证关系思考
- jquery属性的相关js实现方法
- Tomcat启动失败:Could not load java.net.URLEncoder 问题解决
- 从零开始学_JavaScript_系列(65)——class的继承(2)super、extends与多重继承
- Recyclerviews的使用(瀑布流)
- QT 表格中的内容 怎么用 inputmask设定范围
- Linux 注册系统服务
- 重新绘制、刷新tableView的cell
- 【java笔试系列四】Java实现栈Stack和队列Queue
- 树莓派3b实现多个功能模块同时运行入门(C语言多线程)
- 根据list<object>对象中某个字段去除重复值
- Android图片加载框架最全解析(一),Glide的基本用法
- 剑指offer/合并两个排序的链表