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下载

0 0