第一行代学习笔记:Android基础----RecyclerView

添加依赖

implementation 'com.android.support:recyclerview-v7:27.1.1'

创建RecyclerView适配器

public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {
    private List<Fruit> mFruitList;
    static class ViewHolder extends RecyclerView.ViewHolder{
        AppCompatImageView fruitImage;
        AppCompatTextView fruitName;

        public ViewHolder(View view) {
            super(view);
            fruitImage = view.findViewById(R.id.fruit_image);
            fruitName = view.findViewById(R.id.fruit_name);
        }
    }

    public FruitAdapter(List<Fruit> fruitList) {
        this.mFruitList = fruitList;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false);
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Fruit fruit = mFruitList.get(position);
        holder.fruitImage.setImageResource(fruit.getImageId());
        holder.fruitName.setText(fruit.getName());
    }

    @Override
    public int getItemCount() {
        return mFruitList.size();
    }


}

定义内部类ViewHolder,继承自RecyclerView.ViewHolder.ViewHolder的构造参数中传入一个View参数,这个参数通常就是RecyclerView子项的最外层布局。那么就可以通过findVIewById()方法来获取控件实例。

RecyclerView使用

 RecyclerView recyclerView = findViewById(R.id.recycler_view);
        LinearLayoutManager manager = new LinearLayoutManager(this);
        manager.setOrientation(LinearLayoutManager.HORIZONTAL);
        recyclerView.setLayoutManager(manager);
        FruitAdapter adapter = new FruitAdapter(fruitList);
        recyclerView.setAdapter(adapter);

LayoutManager指定RecyclerView的布局方式,setOrientation()指定布局横向排列

为什么ListView很难或者根本无法实现的效果在RecyclerView上很容易实现呢?这是因为ListView的布局是有自身去管理的,而RecyclerView则将这个工作交给了LayoutManager,LayoutManager中制定了一套可扩展的布局排列接口,子类只要按照接口规范来实现,就能定制出各种不同排列方式的布局了。除了LinearLayoutManager外,RecyclerView还提供了网络布局GridLayoutManager,和瀑布流布局StaggeredGriedLayoutManager.

猜你喜欢

转载自blog.csdn.net/zsp45212/article/details/80538639