使用RecyclerView实现水平列表

1、效果图


2、activity_horizontallistview.xml

<?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"
    android:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview_horizontal1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:overScrollMode="never"
        android:scrollbars="none"
        />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview_horizontal2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:overScrollMode="never"
        android:scrollbars="none"
        />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview_horizontal3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:overScrollMode="never"
        android:scrollbars="none"
        />
</LinearLayout>
3、activity代码

package ivan.com.appbackendtest;

import android.content.Context;
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.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

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

/**
 * Created by ivan on 2017/6/9.
 */

public class HorizontalListviewActivity extends AppCompatActivity {
    private RecyclerView recyclerview_horizontal1;
    private GalleryAdapter mAdapter1;
    private RecyclerView recyclerview_horizontal2;
    private GalleryAdapter mAdapter2;
    private RecyclerView recyclerview_horizontal3;
    private GalleryAdapter mAdapter3;
    private List<Integer> mDatas1;
    private List<Integer> mDatas2;
    private List<Integer> mDatas3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_horizontallistview);
        initDatas();
        //得到控件
        recyclerview_horizontal1 = (RecyclerView)findViewById(R.id.recyclerview_horizontal1);
        //设置布局管理器
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        recyclerview_horizontal1.setLayoutManager(linearLayoutManager);
        //设置适配器
        mAdapter1 = new GalleryAdapter(this, mDatas1);
        recyclerview_horizontal1.setAdapter(mAdapter1);

        //得到控件
        recyclerview_horizontal2 = (RecyclerView)findViewById(R.id.recyclerview_horizontal2);
        //设置布局管理器
        LinearLayoutManager linearLayoutManager2 = new LinearLayoutManager(this);
        linearLayoutManager2.setOrientation(LinearLayoutManager.HORIZONTAL);
        recyclerview_horizontal2.setLayoutManager(linearLayoutManager2);
        //设置适配器
        mAdapter2 = new GalleryAdapter(this, mDatas2);
        recyclerview_horizontal2.setAdapter(mAdapter2);

        //得到控件
        recyclerview_horizontal3 = (RecyclerView)findViewById(R.id.recyclerview_horizontal3);
        //设置布局管理器
        LinearLayoutManager linearLayoutManager3 = new LinearLayoutManager(this);
        linearLayoutManager3.setOrientation(LinearLayoutManager.HORIZONTAL);
        recyclerview_horizontal3.setLayoutManager(linearLayoutManager3);
        //设置适配器
        mAdapter3 = new GalleryAdapter(this, mDatas3);
        recyclerview_horizontal3.setAdapter(mAdapter3);
    }
    private void initDatas()
    {
        mDatas1 = new ArrayList<>(Arrays.asList(R.mipmap.ic_launcher));
        mDatas2 = new ArrayList<>(Arrays.asList(R.mipmap.ic_launcher,R.mipmap.ic_launcher));
        mDatas3 = new ArrayList<>(Arrays.asList(R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher));
    }
    public class GalleryAdapter extends
            RecyclerView.Adapter<GalleryAdapter.ViewHolder>
    {
        private LayoutInflater mInflater;
        private List<Integer> mDatas;

        public GalleryAdapter(Context context, List<Integer> datats)
        {
            mInflater = LayoutInflater.from(context);
            mDatas = datats;
        }

        public class ViewHolder extends RecyclerView.ViewHolder
        {
            public ViewHolder(View arg0)
            {
                super(arg0);
            }

            ImageView mImg;
            TextView mTxt;
        }

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

        /**
         * 创建ViewHolder
         */
        @Override
        public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i)
        {
            View view = mInflater.inflate(R.layout.item_listview,
                    viewGroup, false);
            ViewHolder viewHolder = new ViewHolder(view);

            viewHolder.mImg = (ImageView) view
                    .findViewById(R.id.id_index_gallery_item_image);
            return viewHolder;
        }
        /**
         * 设置值
         */
        @Override
        public void onBindViewHolder(final ViewHolder viewHolder, final int i)
        {
            viewHolder.mImg.setImageResource(mDatas.get(i));
        }
    }
}
4、核心代码

 //得到控件
        recyclerview_horizontal1 = (RecyclerView)findViewById(R.id.recyclerview_horizontal1);
        //设置布局管理器
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        recyclerview_horizontal1.setLayoutManager(linearLayoutManager);
        //设置适配器
        mAdapter1 = new GalleryAdapter(this, mDatas1);
        recyclerview_horizontal1.setAdapter(mAdapter1);




下面是一个简单的示例代码,演示如何在垂直 RecyclerView 中嵌套水平 RecyclerView,并刷新子 RecyclerView: 首先,创建一个适配器类 VerticalAdapter 用于垂直 RecyclerView: ```java public class VerticalAdapter extends RecyclerView.Adapter<VerticalAdapter.VerticalViewHolder> { private List<List<String>> data; // 存储数据的二维列表 // 构造方法,传入数据 public VerticalAdapter(List<List<String>> data) { this.data = data; } @NonNull @Override public VerticalViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_vertical, parent, false); return new VerticalViewHolder(view); } @Override public void onBindViewHolder(@NonNull VerticalViewHolder holder, int position) { List<String> rowData = data.get(position); HorizontalAdapter horizontalAdapter = new HorizontalAdapter(rowData); holder.horizontalRecyclerView.setAdapter(horizontalAdapter); holder.horizontalRecyclerView.setLayoutManager(new LinearLayoutManager(holder.horizontalRecyclerView.getContext(), LinearLayoutManager.HORIZONTAL, false)); } @Override public int getItemCount() { return data.size(); } public static class VerticalViewHolder extends RecyclerView.ViewHolder { RecyclerView horizontalRecyclerView; public VerticalViewHolder(@NonNull View itemView) { super(itemView); horizontalRecyclerView = itemView.findViewById(R.id.horizontal_recycler_view); } } } ``` 然后,创建一个适配器类 HorizontalAdapter 用于水平 RecyclerView: ```java public class HorizontalAdapter extends RecyclerView.Adapter<HorizontalAdapter.HorizontalViewHolder> { private List<String> data; // 存储数据的列表 // 构造方法,传入数据 public HorizontalAdapter(List<String> data) { this.data = data; } @NonNull @Override public HorizontalViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_horizontal, parent, false); return new HorizontalViewHolder(view); } @Override public void onBindViewHolder(@NonNull HorizontalViewHolder holder, int position) { String item = data.get(position); holder.textView.setText(item); } @Override public int getItemCount() { return data.size(); } public static class HorizontalViewHolder extends RecyclerView.ViewHolder { TextView textView; public HorizontalViewHolder(@NonNull View itemView) { super(itemView); textView = itemView.findViewById(R.id.text_view); } } } ``` 最后,在你的 Activity 或 Fragment 中使用垂直 RecyclerView: ```java public class MainActivity extends AppCompatActivity { private RecyclerView verticalRecyclerView; private VerticalAdapter verticalAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); verticalRecyclerView = findViewById(R.id.vertical_recycler_view); verticalRecyclerView.setLayoutManager(new LinearLayoutManager(this)); // 模拟数据 List<List<String>> data = new ArrayList<>(); for (int i = 0; i < 5; i++) { List<String> rowData = new ArrayList<>(); for (int j = 0; j < 10; j++) { rowData.add("Item " + j); } data.add(rowData); } verticalAdapter = new VerticalAdapter(data); verticalRecyclerView.setAdapter(verticalAdapter); } // 刷新指定位置的子 RecyclerView private void refreshChildRecyclerView(int position) { verticalAdapter.notifyItemChanged(position); } } ``` 这样就实现了垂直 RecyclerView 嵌套水平 RecyclerView,并可以通过调用 `refreshChildRecyclerView` 方法来刷新指定位置的子 RecyclerView
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhifanxu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值