Android RecyclerView的用法

要实现Android的列表可以使用ListView,也可以使用GridView,不过RecyclerView却可以同时实现这两种效果。

RecyclerView的库需要引用,有两种方法:



这里选择第一个



然后搜索recyclerview,记得小写。然后点击它,等待

还有一种一种方法比较简单,打开grade文件


添加这一行代码:compile'com.android.support:recyclerview-v7:23.0.1'


这里需要注意的是,你的RecyclerView的版本不能高于appcompat的版本,要不然会编译失败

然后点击编译按钮,等待


以后做Android开发需要导入第三方依赖库也是用这两种方法。

RecyclerView和listView一样,也需要适配器,新建一个类继承自RecyclerView,如果你你列表中的单个板块包含多个view,可以使用泛型ViewHolder。

先新建一个item_recycler.xml文件,来决定每一个item的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:padding="4dp"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv_item_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="24sp"
        android:text="标题" />
    <TextView
        android:id="@+id/tv_item_context"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="内容"
        android:textSize="20sp"/>
    <Button
        android:id="@+id/btn_item"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="按钮"/>
</LinearLayout>


接下来来创建它的适配器,MyRecyclerAdapter.java

//要实现它的三个方法 onCreateViewHolder、onBindViewHolder、getItemCount
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder> {
    //title的值
    private ArrayList<String> titleList = new ArrayList<String>();
    //context的值
    private ArrayList<String> contextList = new ArrayList<String>();
    private Context context;

    //创建构造器
    public MyRecyclerAdapter(Context context,ArrayList<String> titleList,ArrayList<String> contextList){
        this.titleList = titleList;
        this.contextList = contextList;
        this.context = context;
    }

    //创建ViewHolder,导入视图
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycler,parent,false);
        MyViewHolder holder = new MyViewHolder(view);
        return holder;
    }

    //绑定视图
    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        holder.tvTitle.setText(titleList.get(position));
        holder.tvContext.setText(contextList.get(position));
        //设置Button的点击事件
        holder.btnItem.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context,"点击了按钮",Toast.LENGTH_SHORT).show();
            }
        });
    }

    //获取item的数量
    @Override
    public int getItemCount() {
        return titleList.size();
    }


    //移除操作
    public void removeItem(int position){
        titleList.remove(position);
        contextList.remove(position);
        notifyDataSetChanged();
    }
    //添加操作也就很简单了,传入新的标题和内容,调用notifyDataSetChanged()方法

    //使用ViewHolder内部类,来完成view的绑定,进行RecyclerView的优化,不必每一个item都去findViewById
    class MyViewHolder extends RecyclerView.ViewHolder {

        TextView tvTitle;
        TextView tvContext;
        Button btnItem;

        public MyViewHolder(final View itemView) {
            super(itemView);
            tvTitle = (TextView) itemView.findViewById(R.id.tv_item_title);
            tvContext = (TextView) itemView.findViewById(R.id.tv_item_context);
            btnItem = (Button) itemView.findViewById(R.id.btn_item);
            //这里可以设置每一个item的点击事件,也可以使用接口回调实现点击事件,大家可以查一下
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                }
            });
        }
    }
}

接下来是在MainActivity里面进行RecyclerView的设置

public class MainActivity extends AppCompatActivity {

    private ArrayList<String>titleList = new ArrayList<String>();
    private ArrayList<String>contextList = new ArrayList<String>();
    private RecyclerView recyclerView;
    private MyRecyclerAdapter adapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
        recyclerView = (RecyclerView) findViewById(R.id.recycler_main);
        
        //下面manger为设置RecyclerView的布局方式,可以任选一个
        
        LinearLayoutManager manager = new LinearLayoutManager(this);
        //设置横向滑动(需要设置item_recycler.xml的宽),默认纵向滑动
        manager.setOrientation(LinearLayoutManager.HORIZONTAL);

        //设置瀑布流,第一个参数表示列数,第二个表示布局方向
        StaggeredGridLayoutManager lauoutmanager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);
        
        
        recyclerView.setLayoutManager(manager);
        adapter = new MyRecyclerAdapter(this,titleList,contextList);
        recyclerView.setAdapter(adapter);

    }

    private void init(){
        titleList.add("标题一");
        titleList.add("标题二");
        titleList.add("标题三");
        titleList.add("标题一");
        titleList.add("标题二");
        titleList.add("标题三");
        titleList.add("标题一");
        titleList.add("标题二");
        titleList.add("标题三");
        contextList.add("文本内容一");
        contextList.add("文本内容二");
        contextList.add("文本内容三");
        contextList.add("文本内容一");
        contextList.add("文本内容二");
        contextList.add("文本内容三");
        contextList.add("文本内容一");
        contextList.add("文本内容二");
        contextList.add("文本内容三");
    }
}

RecyclerView默认是没有分割线的,可以自己实现ItemDecoration类,如果你为了简便,推荐使用CardView,方便好看


猜你喜欢

转载自blog.csdn.net/Young_Time/article/details/79498452