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解析啥的,如果愿意看,就看看,大神绕道啊!