Android进阶之路 - RecyclerView实现横、纵向滑动列表

说来惭愧,在这么久的开发中一直很少使用到横向的列表效果,即使有类似场景也是使用了 ViewPager处理,特此在有时间的基础下给新人写个入门的dome玩玩 ~

Effect ~
在这里插入图片描述

众所周知,RecyclerView的使用中我们会设置布局管理者,所以此篇的关键,在于LinearLayoutManager 的设置方向,关键代码如下 ~

 LinearLayoutManager layoutManager= new LinearLayoutManager(this);
 //这行是关键,设置了布局方向,如未设置HORIZONTAL方向,则默认是垂直状态
 layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
 mRv.setLayoutManager(hLayoutManager);

越来越懒了,这里我用的适配器是在目前项目中使用的 BaseQuickAdapter ~

build(project)

allprojects {
    repositories {
        google()
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

build(app)

  implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.35'
  implementation 'com.android.support:recyclerview-v7:27.1.1'

MainActivity

package nkwl.com.crosswisedemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Toast;

import com.chad.library.adapter.base.BaseQuickAdapter;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RecyclerView mRvH = findViewById(R.id.rv_horizontal);
        RecyclerView mRvV = findViewById(R.id.rv_vertical);

        //模拟数据
        List dataList = new ArrayList<Integer>();
        dataList.add(R.mipmap.scenery);
        dataList.add(R.mipmap.scenery);
        dataList.add(R.mipmap.scenery);
        dataList.add(R.mipmap.scenery);
        dataList.add(R.mipmap.scenery);
        dataList.add(R.mipmap.scenery);
        dataList.add(R.mipmap.scenery);

        //横向
        MyAdapter horizontalAdapter = new MyAdapter(R.layout.item_layout, dataList);
        LinearLayoutManager hLayoutManager = new LinearLayoutManager(this);
        hLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        mRvH.setLayoutManager(hLayoutManager);
        mRvH.setAdapter(horizontalAdapter);
        horizontalAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
                Toast.makeText(MainActivity.this, "横向 - 当前角标:" + position, Toast.LENGTH_SHORT).show();
            }
        });

        //竖向
        MyAdapter verticalAdapter = new MyAdapter(R.layout.item_layout, dataList);
        LinearLayoutManager vLayoutManager = new LinearLayoutManager(this);
        vLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        mRvV.setLayoutManager(vLayoutManager);
        mRvV.setAdapter(verticalAdapter);
        verticalAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
                Toast.makeText(MainActivity.this, "竖向 - 当前角标:" + position, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

activity_main

<?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:orientation="vertical"
    tools:context=".MainActivity">

    <android.support.v7.widget.RecyclerView
        android:background="#225"
        android:layout_width="match_parent"
        android:id="@+id/rv_horizontal"
        android:layout_height="wrap_content"/>

    <android.support.v7.widget.RecyclerView
        android:background="#255"
        android:layout_width="match_parent"
        android:id="@+id/rv_vertical"
        android:layout_height="match_parent"/>

</LinearLayout>

MyAdapter

package nkwl.com.crosswisedemo;

import android.support.annotation.Nullable;

import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;

import java.util.List;

/**
 * @author MrLiu
 * @date 2019/11/26
 * desc
 */
public class MyAdapter extends BaseQuickAdapter<Integer,BaseViewHolder> {

    public MyAdapter(int layoutResId, @Nullable List data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, Integer item) {
        helper.setImageResource(R.id.item_img,item);
    }
}

item_layout

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

    <ImageView
        android:layout_margin="5dp"
        android:scaleType="fitXY"
        android:id="@+id/item_img"
        android:layout_width="130dp"
        android:src="@mipmap/scenery"
        android:layout_height="130dp" />

</RelativeLayout>
发布了247 篇原创文章 · 获赞 97 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/qq_20451879/article/details/103563658
今日推荐