Android-RecyclerView的基本使用

两年没怎么做项目,基本忘的差不多了,打算这两天重新学学基础,唉,苦逼ing

目标效果:

activity_main.xml页面:

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

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rvShow"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </android.support.v7.widget.RecyclerView>

</RelativeLayout>

 

list_item.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="50dp">
<TextView
    android:id="@+id/tvItem"
    android:text="hello"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
</LinearLayout>

 

MyAdapter.java页面:

package com.example.one;

import android.content.Context;
import android.support.annotation.NonNull;
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 java.util.ArrayList;

/**
 * 用来将数据适配到RecyclerView中
 */
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{
    private ArrayList<String> mData;   //存储要显示的数据
    Context context;   //识别Activity

    /*构造方法,初始化*/
    public MyAdapter(Context context,ArrayList<String> mData) {
        this.context=context;          //从Activity中传过来的当前是哪个Activity和要显示的数据
        this.mData = mData;
    }

    @NonNull
    @Override
    /*RecyclerView一开始调用一遍,把每一项都初始一遍 */
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View v= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item,viewGroup,false);  //实例化展示的View
        final ViewHolder viewHolder=new ViewHolder(v) ;   //实例化ViewHolder
        v.setOnClickListener(new View.OnClickListener() {     //每一行的点击事件
            @Override
            public void onClick(View v) {
                Toast.makeText(context,"你好"+viewHolder.tvItem.getText().toString(),Toast.LENGTH_LONG).show();
            }
        });
        return viewHolder;   //返回一个ViewHolder
    }

    @Override
    /*RecyclerView滑动时调用*/
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
        viewHolder.tvItem.setText(mData.get(i));   //绑定数据
    }


    @Override
    /*返回总条数*/
    public int getItemCount() {
        return mData.size();
    }

    /*为了提高运行效率,一般自定义类ViewHolder来减少findViewById的使用(指滑动过程中不断的初始化控件)*/
    class ViewHolder extends RecyclerView.ViewHolder{
        TextView tvItem;
        public ViewHolder(View itemView){
            super(itemView);
            tvItem=(TextView) itemView.findViewById(R.id.tvItem);
        }
    }



}

 

MainActivity.java页面:

package com.example.one;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initData();
        initView();
    }
    /*初始化数据*/
    private void initData() {
        mLayoutManager=new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);  //设置布局管理器
        mAdapter=new MyAdapter(MainActivity.this,getData());   //设置Adapter
    }

    /*获取数据*/
    private ArrayList<String> getData() {
        ArrayList<String> data=new ArrayList<>();
        String temp="item";
        for(int i=0;i<20;i++){
            data.add(i+temp);
        }
        return data;
    }
    /*初始化视图*/
    private void initView() {
        mRecyclerView=(RecyclerView)findViewById(R.id.rvShow);
        mRecyclerView.setLayoutManager(mLayoutManager);   //设置布局管理器
        mRecyclerView.setAdapter(mAdapter);  //设置Adapter

    }
}

 

时间长了对这些控件概念比较模糊了,而且RecyclerView作为一个新的控件(不知道什么时候出来的,但是以前没用过)更是有点不理解,这里比较一下RecyclerView和传统ListView的区别:

1.在滚动视图中一般都会使用ViewHolder来保存视图,使每次滑动不必再重复调用findViewById,提高效率,但是在ListView中需要自己写,即可以使用也可以不使用,而在RecyclerView中直接调用RecyclerView.ViewHolder,这就使ViewHolder的使用变成了必须;

2.ListView的样式比较单一,只能垂直方向滚动,而RecyclerView可以对样式进行了扩展;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值