Android简易实战教程--第四十六话《RecyclerView竖向和横向滚动》

Android5.X后,引入了RecyclerView,这个控件使用起来非常的方便,不但可以完成listView的效果,而且还可以实现ListView无法实现的效果。当然,在新能方便也做了大大的提高。本篇 第四十六话 案例,就使用这个控件,完成竖向和横向加载数据。

我们直接上代码,在每一步后都简要分析一下功能:

一、实现竖向滚动

1、定义一个实体类:

package com.itydl.recyclerview;

public class Fruit {

   private String name;

   private int imageId;

   public Fruit(String name, int imageId) {
      this.name = name;
      this.imageId = imageId;
   }

   public String getName() {
      return name;
   }

   public int getImageId() {
      return imageId;
   }

}

2、需要为RecyclerView的子项制定一个自定义的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              >

    <ImageView
        android:id="@+id/fruit_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/fruit_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginTop="10dip"/>

</LinearLayout>
一个用于显示图片,一个用于显示文本。

3、定义适配器:

public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {


    private List<Fruit> mFruitList = new ArrayList<Fruit>();

    static class ViewHolder extends RecyclerView.ViewHolder {

        ImageView mMImageView;
        TextView mTextView;

        public ViewHolder(View itemView) {
            super(itemView);
            mMImageView =  (ImageView) itemView.findViewById(R.id.fruit_image);
            mTextView = (TextView) itemView.findViewById(R.id.fruit_name);
        }
    }

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

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

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

    @Override
    public int getItemCount() {
        return mFruitList.size();
    }
}
这个是与ListView与众不同的地方,要着重说明一下。您会发现,用起来真实太爽了,封装的是如此之好用!

首选定义一个内部类ViewHolder,它继承自RecycleView.ViewHolder。然后,ViewHolder的构造方法中要传入一个View参数,这个参数通常是RecyclerView子项的最外层布局,那么我们就可以通过findviewById方法来获取到布局中的控件实例。

接着往下看,FruitAdapter构造,一般用于获取数据源。

继续往下看,三个方法,依次说明。1、用于创建ViewHolder实例的;2、用于对RecyclerView子项的控件赋值;3、用于返回我RecyclerView会显示多少条数据。

4、咱们再来看看主活动中的代码:

public class MainActivity extends AppCompatActivity {

    private List<Fruit> fruitList = new ArrayList<Fruit>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initFruits();
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycle_view);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        FruitAdapter adapter = new FruitAdapter(fruitList);
        recyclerView.setAdapter(adapter);
    }

    private void initFruits() {
        for (int i = 0; i < 2; i++) {
            Fruit apple = new Fruit("Apple", R.drawable.apple_pic);
            fruitList.add(apple);
            Fruit banana = new Fruit("Banana", R.drawable.banana_pic);
            fruitList.add(banana);
            Fruit orange = new Fruit("Orange", R.drawable.orange_pic);
            fruitList.add(orange);
            Fruit watermelon = new Fruit("Watermelon", R.drawable.watermelon_pic);
            fruitList.add(watermelon);
            Fruit pear = new Fruit("Pear", R.drawable.pear_pic);
            fruitList.add(pear);
            Fruit grape = new Fruit("Grape", R.drawable.grape_pic);
            fruitList.add(grape);
            Fruit pineapple = new Fruit("Pineapple", R.drawable.pineapple_pic);
            fruitList.add(pineapple);
            Fruit strawberry = new Fruit("Strawberry", R.drawable.strawberry_pic);
            fruitList.add(strawberry);
            Fruit cherry = new Fruit("Cherry", R.drawable.cherry_pic);
            fruitList.add(cherry);
            Fruit mango = new Fruit("Mango", R.drawable.mango_pic);
            fruitList.add(mango);
        }
    }
}
这个没什么可说的,需要注意两行代码:

LinearLayoutManager layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
一个是创建LinearLayoutManager,表示线性布局管理器,默认方向是垂直布局;并把这个管理器设置给RecyclerView,这样就相当于设置RecyclerView为竖直滚动。



二、实现横向滚动布局:

实现了竖向滚动,横向滚动就手到擒来啦。

只需要简单的修改代码:

子项布局文件修改为下面代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="100dp"
              android:layout_height="match_parent"
              android:orientation="vertical"
              >

    <ImageView
        android:layout_gravity="center_horizontal"
        android:id="@+id/fruit_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/fruit_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dip"/>

</LinearLayout>

在主活动中,修改一下线性布局管理器的方向,添加如下代码

layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);

运行效果如下:



看起来还是蛮不错的哦~



喜欢我的朋友可以关注我。或者微信搜索公众号  Android程序员开发指南  每日一阅一篇安卓文章,每天上下班时间打开公众号看看文章,给您增添一些乐趣。

原文地址:https://www.cnblogs.com/wanghang/p/6299479.html