这篇文章主要来给大家实现一下基础的RecyclerView的集成:
整体上看RecyclerView架构,提供了一种
插拔式
的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现令人瞠目的效果。
- 你想要控制其显示的方式,请通过布局管理器LayoutManager
- 你想要控制Item间的间隔(可绘制),请通过ItemDecoration
- 你想要控制Item增删的动画,请通过ItemAnimator
- 你想要控制点击、长按事件,请自己写!
为了使用RecyclerView控件,我们需要创建一个Adapter和一个LayoutManager:
Adapter:集成自RecyclerView.Adapetr类,主要用来将数据和布局item进行绑定。
先看下结果:
准备工作导入依赖就可以了:
compile 'com.android.support:mediarouter-v7:25.0.0'
compile 'com.android.support:appcompat-v7:25.0.0'
compile 'com.android.support:recyclerview-v7:25.0.0'
接下来就上代码:
MainActivity:
- package com.eightgroup.rikao1013;
- import android.os.Bundle;
- import android.support.v7.app.AppCompatActivity;
- import android.support.v7.widget.DividerItemDecoration;
- import android.support.v7.widget.GridLayoutManager;
- import android.support.v7.widget.LinearLayoutManager;
- import android.support.v7.widget.RecyclerView;
- import android.support.v7.widget.StaggeredGridLayoutManager;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.Button;
- import android.widget.TextView;
- import android.widget.Toast;
- import java.util.ArrayList;
- import java.util.List;
- import butterknife.BindView;
- import butterknife.ButterKnife;
- import butterknife.OnClick;
- public class MainActivity extends AppCompatActivity {
- // butterknife 工具
- @BindView(R.id.id_action_add)
- Button idActionAdd;
- @BindView(R.id.id_action_delete)
- Button idActionDelete;
- @BindView(R.id.id_action_list)
- Button idActionList;
- @BindView(R.id.id_action_group)
- Button idActionGroup;
- @BindView(R.id.id_action_pubu)
- Button idActionPubu;
- private RecyclerView mRecyclerView;
- private static List<String> mDatas;
- HomeAdapter mAdapter;
- public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- ButterKnife.bind(this);
- initData();
- mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview);
- // 三种样式可以自己选择:
- // listview样式
- // mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
- mRecyclerView.setAdapter(mAdapter = new HomeAdapter());
- mRecyclerView.addItemDecoration(new DividerItemDecoration(this,
- DividerItemDecoration.VERTICAL));
- // GridLayoutManager 样式
- mRecyclerView.setLayoutManager(new GridLayoutManager(this, 4));
- // 瀑布流
- // mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL));
- // 配置适配器
- mAdapter.setOnItemClickLitener(new OnItemClickLitener()
- {
- @Override
- public void onItemClick(View view, int position)
- {
- Toast.makeText(MainActivity.this, position + " click",
- Toast.LENGTH_SHORT).show();
- mAdapter.addData(position);
- }
- @Override
- public void onItemLongClick(View view, int position)
- {
- Toast.makeText(MainActivity.this, position + " long click",
- Toast.LENGTH_SHORT).show();
- mAdapter.removeData(position);
- }
- });
- }
- // 添加数据
- protected void initData() {
- mDatas = new ArrayList<String>();
- for (int i = 'A'; i < 'z'; i++) {
- mDatas.add("" + (char) i);
- }
- }
- // 顶部的5个按钮的点击事件
- @OnClick({R.id.id_action_add, R.id.id_action_delete, R.id.id_action_group, R.id.id_action_list, R.id.id_action_pubu})
- public void onViewClicked(View view) {
- switch (view.getId()) {
- // 添加
- case R.id.id_action_add:
- mAdapter.addData(1);
- break;
- // 删除
- case R.id.id_action_delete:
- mAdapter.removeData(1);
- break;
- case R.id.id_action_list:
- mRecyclerView.setAdapter(mAdapter = new HomeAdapter());
- mRecyclerView.addItemDecoration(new DividerItemDecoration(this,
- DividerItemDecoration.VERTICAL));
- mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
- break;
- case R.id.id_action_group:
- mRecyclerView.setAdapter(mAdapter = new HomeAdapter());
- mRecyclerView.addItemDecoration(new DividerItemDecoration(this,
- DividerItemDecoration.VERTICAL));
- // GridLayoutManager
- mRecyclerView.setLayoutManager(new GridLayoutManager(this, 4));
- break;
- case R.id.id_action_pubu:
- mRecyclerView.setAdapter(mAdapter = new HomeAdapter());
- mRecyclerView.addItemDecoration(new DividerItemDecoration(this,
- DividerItemDecoration.VERTICAL));
- mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL));
- break;
- }
- }
- // 自定义内部Adapter
- class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder> {
- @Override
- public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
- MainActivity.this).inflate(R.layout.item_home, parent,
- false));
- return holder;
- }
-
- @Override
- public int getItemCount() {
- return mDatas.size();
- }
-
- class MyViewHolder extends RecyclerView.ViewHolder {
- TextView tv;
- public MyViewHolder(View view) {
- super(view);
- tv = (TextView) view.findViewById(R.id.id_num);
- }
- }
- public void addData(int position) {
- mDatas.add(position, "Insert One");
- notifyItemInserted(position);
- }
- public void removeData(int position) {
- mDatas.remove(position);
- notifyItemRemoved(position);
- }
- // 点击事件
- private OnItemClickLitener mOnItemClickLitener;
- public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener)
- {
- this.mOnItemClickLitener = mOnItemClickLitener;
- }
- @Override
- public void onBindViewHolder(final MyViewHolder holder, final int position)
- {
- holder.tv.setText(mDatas.get(position));
- // 如果设置了回调,则设置点击事件
- if (mOnItemClickLitener != null)
- {
- holder.itemView.setOnClickListener(new View.OnClickListener()
- {
- @Override
- public void onClick(View v)
- {
- int pos = holder.getLayoutPosition();
- mOnItemClickLitener.onItemClick(holder.itemView, pos);
- }
- });
- holder.itemView.setOnLongClickListener(new View.OnLongClickListener()
- {
- @Override
- public boolean onLongClick(View v)
- {
- int pos = holder.getLayoutPosition();
- mOnItemClickLitener.onItemLongClick(holder.itemView, pos);
- return false;
- }
- });
- }
- }
- }
- }
在添加点击事件时,要常见一个类:
OnItemClickLitener:
- package com.eightgroup.rikao1013;
- import android.view.View;
- /**
- * Created by 笔片 on 2017/10/13.
- */
- public interface OnItemClickLitener
- {
- void onItemClick(View view, int position);
- void onItemLongClick(View view , int position);
- }
接下来就来显示布局文件:activity_main.xml:
这其中在预览效果时是显示不出来效果的,只有运行。。。。才能展示效果
- <RelativeLayout 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" >
- <LinearLayout
- android:id="@+id/one"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
- <Button
- android:id="@+id/id_action_add"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="添加"/>
- <Button
- android:id="@+id/id_action_delete"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="删除"/>
- <Button
- android:id="@+id/id_action_list"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="listview"/>
- <Button
- android:id="@+id/id_action_group"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="GroupView"/>
- <Button
- android:id="@+id/id_action_pubu"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="瀑布流"/>
- </LinearLayout>
- <android.support.v7.widget.RecyclerView
- android:layout_below="@id/one"
- android:id="@+id/id_recyclerview"
- android:divider="#ffff0000"
- android:dividerHeight="10dp"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
- </RelativeLayout>
item_home.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:background="#44ff0000"
- android:layout_height="wrap_content">
- <TextView
- android:id="@+id/id_num"
- android:layout_width="match_parent"
- android:layout_height="50dp"
- android:gravity="center"
- android:text="1" />
- <ImageView
- android:id="@+id/img"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="100dp"
- android:src="@mipmap/ic_launcher"/>
- </FrameLayout>
以上就是RecyclerView的一些简单的基本操作,适合基础人员直接粘贴就可以使用了。