android开发 使用RecycleView加载数据

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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值