RecyclerView提供了三种布局管理器
1、LinearLayoutManager:线性布局管理器,支持水平和垂直效果。
2、GridLayoutManager:网格布局管理器,支持水平和垂直效果。
3、StaggeredGridLayoutManager:分布型管理器,瀑布流效果Animations(动画)效果
注意 添加的依赖
compile 'com.android.support:recyclerview-v7:23.2.0'
compile 'com.squareup.okio:okio:1.5.0'
compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.picasso:picasso:2.5.1'
XML 文件
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.bwei.recyclerview.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</android.support.constraint.ConstraintLayout>
具体代码
package com.bwei.recyclerview;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
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.squareup.picasso.Picasso;
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.Request;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity {
String url = "http://result.eolinker.com/iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=one";
private RecyclerView rv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//抽取一个获取数据的方法
getData();
//找控件
rv = (RecyclerView) findViewById(R.id.rv);
//布局管理器
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
//把布局管理器设置给RecyclerView
rv.setLayoutManager(linearLayoutManager);
//创建适配器
}
//获取数据
private void getData() {
//创建OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
//创建Request
Request request = new Request.Builder().url(url).build();
//得到Call
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String json = response.body().string();
runOnUiThread(new Runnable() {
@Override
public void run() {
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();
}
}
});
}
});
}
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
Context context;
JSONArray data;
public MyAdapter(Context context, JSONArray data) {
this.context = context;
this.data = data;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//把View绑定到ViewHolder上
View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item, parent, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
//绑定数据给控件
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
try {
JSONObject jsonObject = data.getJSONObject(position);
String title = jsonObject.getString("title");
String image_url = jsonObject.getString("image_url");
holder.tv_title.setText(title);
//一行代码实现图片显示
Picasso.with(context).load(image_url).into(holder.iv_head);
} catch (JSONException e) {
e.printStackTrace();
}
}
//获取数据的数量
@Override
public int getItemCount() {
return data.length();
}
//MyViewHolder应该是适配器MyAdapter的内部类
public class MyViewHolder extends RecyclerView.ViewHolder {
//声明控件
public ImageView iv_head;
public TextView tv_title;
// 自定义的ViewHolder,持有每个Item的的所有界面元素
public MyViewHolder(View view) {
super(view);
//获取控件赋值
iv_head = view.findViewById(R.id.iv_head);
tv_title = view.findViewById(R.id.tv_title);
}
}
}
}