天天看点

安卓的RecyclerView应用前言一、依赖的导入二、RecyclerView的Item视图编写三、RecyclerView适配器的编写实现效果总结

RecyclerView

  • 前言
  • 一、依赖的导入
  • 二、RecyclerView的Item视图编写
  • 三、RecyclerView适配器的编写
    • 1、设置返回的视图
    • 2、设置数据绑定和返回数量
    • 3、在控件中设置这个适配器
  • 实现效果
  • 总结
    • 补充

前言

更多内容请访问酒易的个人博客

本章主要讲述RecyclerView的适配器的设置

一、依赖的导入

RecyclerView是需要导入依赖的,请添加以下代码:

二、RecyclerView的Item视图编写

安卓的RecyclerView应用前言一、依赖的导入二、RecyclerView的Item视图编写三、RecyclerView适配器的编写实现效果总结

这里主要设置了item的大小,以及,设置了里面两个数据的ID,当然还设置了颜色用来区分

三、RecyclerView适配器的编写

package com.example.uidesign;

import androidx.recyclerview.widget.RecyclerView;

//下面这些代码是报错的,先把这里的Adapter<>设置成Adapter<RecyclerViewItemTest.ViewHolder> 然后 , ALT+Enter后回车重写接口
public class RecyclerViewItemTest extends RecyclerView.Adapter<>{
    public static class ViewHolder extends RecyclerView.ViewHolder{

    }
}

           

重写后的代码是这个样子

//下面这些代码是报错的,先把这里的Adapter<>设置成Adapter<RecyclerViewItemTest.ViewHolder> 然后 , ALT+Enter后回车重写接口

    public class RecyclerViewItemTest extends RecyclerView.Adapter<RecyclerViewItemTest.ViewHolder>{
        @NonNull
        @Override
        public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            return null;//创建父容器视图,返回的也是一个父容器视图,意思就是到时候返回你能看到的视图
        }

        @NonNull


        @Override
        public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
            //绑定父容器,这里可以用来给父容器中的子容器的控件也就是item设置东西,比如设置每一个控件的文本框设置成红色,或者设置成1111

        }



        @Override
        public int getItemCount() {//这里的到item的count,也就是传入一个数据的数量大小
            return 0;
        }

        public static class ViewHolder extends RecyclerView.ViewHolder{

            public ViewHolder(@NonNull View itemView) {
                //这里是子容器的方法,在这里可以通过这个itemView得到每个item也就是每个子容器中的控件
                super(itemView);

            }
        }
    }
           

这个时候我们的适配器就写好了,但是我们没有返回视图,没有返回数量,没有设置数据绑定,所以我们还得把这些补上。

1、设置返回的视图

这里是新建了View对象把item视图给创建出来了。然后将它设置成了ViewHolder并返回

public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_item_test,parent,false);
            ViewHolder viewHolder = new ViewHolder(view);
            return viewHolder;//创建父容器视图,返回的也是一个父容器视图,意思就是到时候返回你能看到的视图
        }

           

2、设置数据绑定和返回数量

public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
            //绑定父容器,这里可以用来给父容器中的子容器的控件也就是item设置东西,比如设置每一个控件的文本框设置成红色,或者设置成1111
            
            holder.item1.setText(stringList1.get(position));
            holder.item2.setText(stringList2.get(position));
            //这里就是可以用来设置控件的数据的地方
        }

        //这里设置数组来传递数据
        private List<String> stringList1;
        private List<String> stringList2;
        //设置通过构造方法来的到数据
        public RecyclerViewItemTest(List<String> stringList1, List<String> stringList2) {
            this.stringList1 = stringList1;
            this.stringList2 = stringList2;
        }
        
        
        @Override
        public int getItemCount() {//这里的到item的count,也就是传入一个数据的数量大小
            return stringList1.size();//这里返回数据的大小,返回的大小也是子控件数量的大小
        }

        public static class ViewHolder extends RecyclerView.ViewHolder{
            //这里得到这些item里面的控件
            public TextView item1;
            public TextView item2;
            public ViewHolder(@NonNull View itemView) {
                //这里是子容器的方法,在这里可以通过这个itemView得到每个item也就是每个子容器中的控件
                super(itemView);
                item1 = itemView.findViewById(R.id.recycler_item);
                item2 = itemView.findViewById(R.id.recycler_item1);

            }
        }
           

详细请看代码注释,这样,一个适配器就写好了。

3、在控件中设置这个适配器

此时我们来到主活动,拿到这个recyclerview进行设置

public class RecyclerviewTestActivity extends Activity  {

    private RecyclerView recyclerTest;

    private List<String> stringList1 = new ArrayList<>();
    private List<String> stringList2 = new ArrayList<>();
        private RecyclerViewItemTest recyclerViewItemTest;


        @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.recyclerview_test);
        //得到recyclerview控件对象
        recyclerTest = findViewById(R.id.recycler);
        //创建出适配器对象
        recyclerViewItemTest = new RecyclerViewItemTest(stringList1, stringList2);
        //recyclerview是需要设置视图管理的,这里设置了视图管理,然后新建了一个网格视图管理器,里面的参数是,一个上下文对象,一个是指垂直一行放多少个,第三个是设置水平方式,第四个设置是否翻转视图,一般选否

        recyclerTest.setLayoutManager(new GridLayoutManager(this,2,RecyclerView.HORIZONTAL,false));
        //设置完了视图管理就需要设置适配器了
        recyclerTest.setAdapter(recyclerViewItemTest);
        //此时string的数据内容都是空的,我们给他添加内容进去
            for (int i = 0; i <10 ; i++) {
                stringList1.add(i+"");
                stringList2.add((i*10)+"");
            }
            /**
             * 这里非常重要,当我们编写设置完了动态数据后需要更新数据,这里通过适配器对象的notifyDataSetChanged()方法更新数据。
             */
            recyclerViewItemTest.notifyDataSetChanged();
    }
           

实现效果

这是可以水平滑动的控件,我刚才在设置他的视图管理器的时候就写了,

这个被设置成了两行,水平的方式。

安卓的RecyclerView应用前言一、依赖的导入二、RecyclerView的Item视图编写三、RecyclerView适配器的编写实现效果总结
安卓的RecyclerView应用前言一、依赖的导入二、RecyclerView的Item视图编写三、RecyclerView适配器的编写实现效果总结

总结

  1. recyclerview主要可以用来设置一些横向滚动,提高了应用性。
  2. 适配器主要需要设置,父容器视图,绑定子容器的控件的设置,返回子控件的数量。
  3. 在主活动中通过recyclerview对象设置适配器的时候需要先设置适配器的视图管理,我一般使用的是网格管理,可以按下GLM可以快捷打出来。然后在设置适配器。
  4. 当动态数据被改变的时候需要更新适配器数据才能实时改变,所以要及时通过通知数据被改变的方法去更新数据。

补充

在item视图的父视图最好是用内容大小宽高,因为如果都是屏幕宽高他就真的占屏幕宽高