android开发 使用RecycleView加载数据
来源:互联网 发布:php 面向对象 太烂 编辑:程序博客网 时间:2024/05/19 18:41
AndroidStudio RecycleView的添加在另外的一篇博客里,就不说了,
话不多说,直接上代码(我这里是直接解析assets下的json数据显示在RecycleView中的,比较简单):
JsonData:
[ { "id": "1", "version": "1", "name": "Angry Birds" }, { "id": "2", "version": "1.2", "name": "HHa" }, { "id": "3", "version": "1.3", "name": "我来了" }, { "id": "4", "version": "1.4", "name": "我看看" }, { "id": "5", "version": "1.5", "name": "我走了" }, { "id": "6", "version": "2.0", "name": "完美世界" }, { "id": "7", "version": "2.1", "name": "神墓" }, { "id": "8", "version": "2.2", "name": "不死不灭" }, { "id": "9", "version": "2.3", "name": "遮天" }, { "id": "10", "version": "2.4", "name": "长生界" }, { "id": "11", "version": "2.5", "name": "看你麻痹,少看点小说" }]
随便构造了点数据,哈
然后布局直接显示用RecycleView加载就好了,这里要写一个实体类和适配器
Book:
public class Book{ private String name; private String version; private String id; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String toString(){ return "name="+name+",id="+id+",version="+version; }}
RecycleView的item事件需要我们自己去写,现在定义一个接口,item点击事件BookItemOnClickListener :
public interface BookItemOnClickListener { void onClick(View view,int position);}
BookAdapter的布局item_book:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:layout_marginTop="15dp" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="书名:" android:textColor="@color/black" android:textSize="12sp" /> <TextView android:id="@+id/tv_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="fff" android:textSize="12sp" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="15dp" android:layout_marginTop="15dp" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Id:" android:textColor="@color/black" android:textSize="12sp" /> <TextView android:id="@+id/tv_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="fff" android:textSize="12sp" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="15dp" android:layout_marginTop="15dp" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="版本:" android:textColor="@color/black" android:textSize="12sp" /> <TextView android:id="@+id/tv_version" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="fff" android:textSize="12sp" /> </LinearLayout></LinearLayout>
BookAdapter:package com.vincent.ui.adapter;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.TextureView;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import com.vincent.android.R;import com.vincent.enty.Book;import com.vincent.listener.BookItemOnClickListener;import java.util.List;/** * Created by Vincent on 2016/8/3. */public class BookAdapter extends RecyclerView.Adapter<BookAdapter.ViewHolder> { private List<Book> data; private Context context; private BookItemOnClickListener onItemClick;//item点击监听 public void setData(List<Book> listData){//设置数据 this.data=listData; } public void setOnItemClick(BookItemOnClickListener click){ this.onItemClick=click; } @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { if(this.context==null){ this.context=viewGroup.getContext(); } View view= LayoutInflater.from(context).inflate(R.layout.item_book,viewGroup,false); //创建一个VIewHolder return new ViewHolder(view,onItemClick); } @Override public void onBindViewHolder(ViewHolder holder, int position) { Book book=data.get(position); holder.bookName.setText(book.getName()); holder.bookName.setTextColor(context.getResources().getColor(R.color.red)); holder.bookId.setText(book.getId()); holder.bookId.setTextColor(context.getResources().getColor(R.color.red)); holder.bookVersion.setText(book.getVersion()); holder.bookVersion.setTextColor(context.getResources().getColor(R.color.red)); } @Override public int getItemCount() { return (data!=null&&!data.isEmpty()?data.size():0); } static class ViewHolder extends RecyclerView.ViewHolder{ private TextView bookName,bookId,bookVersion; public ViewHolder(View itemView, final BookItemOnClickListener onItemClick) { super(itemView); bookName=(TextView)itemView.findViewById(R.id.tv_name); bookId=(TextView)itemView.findViewById(R.id.tv_id); bookVersion=(TextView)itemView.findViewById(R.id.tv_version); itemView.setOnClickListener(new View.OnClickListener() {//设置item点击监听事件 @Override public void onClick(View view) { onItemClick.onClick(view,getAdapterPosition()); } }); } }}
我是写在了一个Fragment里,在Activity也差不多的,代码:
package com.vincent.ui.fragment;
import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import com.vincent.android.R;
import com.vincent.enty.Book;
import com.vincent.listener.BookItemOnClickListener;
import com.vincent.ui.adapter.BookAdapter;
import com.vincent.utils.ToastUtil;
import com.vincent.view.DividerItemDecoration;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Vincent on 2016/8/2.
*/
public class FragmentSquare extends Fragment {
private View view;
private List listData;
private BookAdapter adapter;
private RecyclerView rvContent;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable Bundle savedInstanceState) {
if(view==null){
view=inflater.inflate(R.layout.frg_square,null);
}
listData=new ArrayList<>();
adapter=new BookAdapter();
Button btn=(Button)view.findViewById(R.id.button2);
//设置布局管理器
rvContent=(RecyclerView)view.findViewById(R.id.rv_content);
rvContent.setItemAnimator(new DefaultItemAnimator());//默认动画效果
rvContent.setLayoutManager(new LinearLayoutManager(getActivity().getApplicationContext(), LinearLayoutManager.VERTICAL, false));//设置布局管理器,第三个参数为是否逆向布局
rvContent.addItemDecoration(new DividerItemDecoration(getActivity().getApplicationContext(), LinearLayoutManager.VERTICAL)); //分割线
rvContent.setHasFixedSize(true);
btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { try { InputStream is=getActivity().getAssets().open("JsonData"); int size=is.available(); byte[] b=new byte[size]; is.read(b); is.close(); String content=new String(b); Log.d("data",content); try { JSONArray jsonArray=new JSONArray(content); Log.d("data_length",String.valueOf(jsonArray.length())); if(listData!=null){ listData.clear();//加载数据之前先清空缓存,避免重复加载,如果不清理每点击一次数据会往后重复添加一次 } for(int i=0;i<jsonArray.length();i++){ JSONObject jsonObject=jsonArray.getJSONObject(i); listData.add(getData(jsonObject)); } if(listData.size()==0){ ToastUtil.defaultToast(getActivity().getApplicationContext(),"没有数据"); return; } refreshData(); Log.d("data_list",listData.toString()); } catch (JSONException e) { ToastUtil.defaultToastS(getActivity().getApplicationContext(),"有一个错误"); e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } } }); adapter.setOnItemClick(new BookItemOnClickListener() {//设置item点击效果 @Override public void onClick(View view, int position) { ToastUtil.defaultToast(getActivity().getApplicationContext(),"别点了,没有了"); } }); return view;}//刷新界面private void refreshData() { adapter.setData(listData); rvContent.setAdapter(adapter); Log.d("data",listData.toString()); adapter.notifyDataSetChanged();}private Book getData(JSONObject jsonObject) { Book book=new Book(); book.setName(jsonObject.optString("name")); book.setId(jsonObject.optString("id")); book.setVersion(jsonObject.optString("version")); return book;}
}
这个代码里面还包含了一些别的东西,平时没事看书写的。。。。引导页,自定义广播,简单的定位,用的google的api,解析从google拿数据,不翻墙貌似出不来数据,Gosn解析啥的,如果愿意看,就看看,大神绕道啊!
点此demo下载
- android开发 使用RecycleView加载数据
- Android 开发之RecycleView的简单使用
- Android - RecycleView 使用 Universal-Image-Loader加载优化
- Android RecycleView上拉加载
- Android RecycleView的使用
- android recycleview使用
- android RecycleView的使用
- android recycleView使用总结
- Android RecycleView使用详解
- android RecycleView的使用
- Android RecycleView---- RecycleView的简单使用
- android控件使用---recycleview自定义上拉加载,和加载多个布局及加入动画
- recycleview上拉自动加载数据
- android基础开发之RecycleView
- Android开发 Fragment+RecycleView有个坑
- Android - 开发实例(9):使用Loader进行数据加载
- android开发异步加载网络数据AsyncTask的使用
- Android开发笔记之RecycleView加载不同item布局的实现
- pch文件配置
- Python 基础归纳整理
- python——函数
- Give the common ancestor of all the deepest nodes of a tree
- 最近公共祖先
- android开发 使用RecycleView加载数据
- 使用vlc实现视频TS流的推送
- Exception:Failed to start component [StandardEngine[Catalina... NoClassDefFoundError:org/apache/log4
- java 通过URL请求获取结果(http协议)
- useful url
- php浮点数的精度问题深究
- Redis 介绍
- 数学概念
- log4j根据不同模块配置