首先我们要导RecylerView控件依赖:
compile 'com.android.support:recyclerview-v7:23.2.0'
当获取图片时需要导的依赖为:compile 'com.squareup.picasso:picasso:2.5.1'
能用各种布局管理器:
1、LinearLayoutManager:线性布局管理器,支持水平和垂直效果。
2、GridLayoutManager:网格布局管理器,支持水平和垂直效果。
3、StaggeredGridLayoutManager:分布型管理器,瀑布流效果Animations(动画)效果
然后在布局文件里代码如下:
<android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/re" ></android.support.v7.widget.RecyclerView>
整个操作如下代码:
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);
//表格效果
/*GridLayoutManager gridlayoutmanager = new GridLayoutManager(this, 2);
rv.setLayoutManager(gridlayoutmanager);*/
//瀑布流效果
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
rv.setLayoutManager(staggeredGridLayoutManager);
//创建适配器
}
//获取数据
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);
//设置条目点击监听
adapter.setOnRecyclerViewItemClickListener(new MyAdapter.OnRecyclerViewItemClickListener() {
@Override
public void onRecyclerViewItemClick(int position) {
Toast.makeText(MainActivity.this, "获取对应的条目点击位置:" + position, Toast.LENGTH_SHORT).show();
}
});
//设置条目长按监听
adapter.setOnRecyclerViewItemLongClickListener(new MyAdapter.OnRecyclerViewItemLongClickListener() {
@Override
public void onRecyclerViewItemLongClick(int position) {
Toast.makeText(MainActivity.this, "获取对应的条目长按位置:" + position, Toast.LENGTH_SHORT).show();
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
});
}
}
下面是在MAadapter里的方法操控代码:
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(context).inflate(R.layout.item, parent, false);
final MyViewHolder holder = new MyViewHolder(view);
//view子条目
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// view子条目对应位置
int position = holder.getLayoutPosition();
//回调监听
if (mListener != null) {
//设置监听
mListener.onRecyclerViewItemClick(position);
}
}
});
//view子条目的长按
view.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// view子条目对应位置
int position = holder.getLayoutPosition();
//回调监听
if (longClickListener!=null){
longClickListener.onRecyclerViewItemLongClick(position);
}
return true;
}
});
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);
}
}
//接口回调 实现条目点击
//第一步定义接口
public interface OnRecyclerViewItemClickListener {
void onRecyclerViewItemClick(int position);
}
//第二步声明接口
OnRecyclerViewItemClickListener mListener;
//第三步对外提供一个设置监听的公共方法
public void setOnRecyclerViewItemClickListener(OnRecyclerViewItemClickListener listener) {
//赋值
mListener = listener;
}
//条目长按
public interface OnRecyclerViewItemLongClickListener{
void onRecyclerViewItemLongClick(int position);
}
OnRecyclerViewItemLongClickListener longClickListener;
public void setOnRecyclerViewItemLongClickListener(OnRecyclerViewItemLongClickListener listener) {
//赋值
longClickListener = listener;
}
}