欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android使用RecyclerView实现列表功能

程序员文章站 2022-06-08 19:01:54
...

在Android中,列表是使用最多最广的功能之一,而RecyclerView是Android中最灵活的列表控件之一,在企业开发中广泛运用,本章我们使用RecyclerView实现如下图的列表功能。

                        Android使用RecyclerView实现列表功能

一.与ListView类似,RecyclerView需要有容纳其布局的layout,以及展示layout的activity

1.activity_linear_recycler_view.xml代码如下,在xml中我们使用RelativeLayout来容纳RecyclerView

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

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

</RelativeLayout>

2.LinearRecyclerViewActivity.java代码如下,用于展示RecyclerView,其中我们为RecyclerView设置Adapter:LinearAdapter

package com.example.fitz.demo4.recycleView;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import com.example.fitz.demo4.R;

public class LinearRecyclerViewActivity extends AppCompatActivity {
private RecyclerView mRvMain;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_linear_recycler_view);
        mRvMain=(RecyclerView) findViewById(R.id.rv_main);
        mRvMain.setLayoutManager(new LinearLayoutManager(LinearRecyclerViewActivity.this));
        mRvMain.setAdapter(new LinearAdapter(LinearRecyclerViewActivity.this));
    }
}

二.实现适配器-LinearAdapter

package com.example.fitz.demo4.recycleView;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import com.example.fitz.demo4.R;
import java.util.ArrayList;
import java.util.List;

public class LinearAdapter extends RecyclerView.Adapter <LinearAdapter.LinearViewHolder>{
    //context
    private Context mContext;
    //展示的数据
    private List<String> list=new ArrayList<>();
    public LinearAdapter(Context context){
        this.mContext=context;
        for(int i=0;i<30;i++){
            list.add(String.format("%s-%s", i/10+1,i));
        }
    }

    //onCreateViewHolder方法创建一个viewHolder,viewholder可以理解为一条数据的展示布局,这里我们自定义类LinearViewHolder创建一个只有TextView的item
    //这里我们需要创建每条布局使用的layout:layout_linear_item
    @Override
    public LinearAdapter.LinearViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new LinearViewHolder(LayoutInflater.from(mContext).inflate(R.layout.layout_linear_item,parent,false));
    }

    //onBindViewHolder方法为item的UI绑定展示数据,
    @Override
    public void onBindViewHolder(LinearAdapter.LinearViewHolder holder, int position) {
        holder.textView.setText(String.format("Hello World %s", list.get(position)));
    }

    //item的总长度
    @Override
    public int getItemCount() {
        return 30;
    }

    //LinearViewHolder可以看作一个item的展示和内部逻辑处理,故而如果需要绑定事件,获取控件的时候要在itemView中获取
    //itemView由onCreateViewHolder方法LayoutInflater.inflatec创建
    class LinearViewHolder extends RecyclerView.ViewHolder{
        private TextView textView;
        public LinearViewHolder(View itemView){
            super(itemView);
            textView=(TextView) itemView.findViewById(R.id.tv_main);

            //简单事件处理
            textView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(mContext,textView.getText().toString(),Toast.LENGTH_SHORT).show();
                }
            });
        }
    }
}

2.layout_linear_item的实现:

<?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="wrap_content">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tv_main"
        android:textSize="20sp"
        android:padding="12px"
        android:text="hello world"/>
</LinearLayout>

三:需要注意的一点,你需要在build.gradle中添加recyclerView依赖:

compile 'com.android.support:design:26.1.0',后面的版本号与所创建的Android应用一致,可展开External Libraries查看

Android使用RecyclerView实现列表功能