Android studio 中 RecycleViewon控件的使用

本文介绍了在 Android Studio 中如何使用 RecyclerView 控件,作为替代 ListView 的高效选择。讲解了 RecyclerView 的特性,如5.0以下需添加兼容包,以及初始化、设置布局管理器和适配器的详细步骤。通过菜单选项展示了不同展示效果,包括标准、横向、纵向及反向排列。同时,提到了必须在原生虚拟机中运行以显示菜单栏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



特性:
1.android5.0以后出现的新控件,5.0以下需加入兼容包 android.support.v7.widget.RecyclerView
2.可代替listView,不用优化。
3.展示效果众多。
4.需添加 LinearLayoutManager,否则展示效果不出现!

tips:须在原生虚拟机中运行,才能显示菜单栏

流程:
1.ctrl+shift+alt+s添加兼容包


2.在xml中添加控件


3.为了方便效果显示,加载菜单布局,再res文件夹下新建menu文件夹,并添加xml布局


4.在mainactivity中添加代码:
//    菜单,方便各种效果的显示
@Override
//加载一个菜单布局
public boolean onCreateOptionsMenu(Menu menu) {
    // 加载布局,使用菜单特有的方法 getMEnuInflater, inflate 对象,参数一 : 菜单显示布局, 2. 固定 menu
    getMenuInflater().inflate(R.menu. menu_main, menu);

    return true;


}
//菜单点击事件处理
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int itemid = item.getItemId();
    if (itemid == R.id. action_list_noraml) {
        // 标准显示
        loatlistdata( falsefalse);
        Toast. makeText( this" 标准显示 ", Toast. LENGTH_SHORT).show();
    }  else if (itemid == R.id. action_list_horizontal) {
        loatlistdata( falsetrue);
    }  else if (itemid == R.id. action_list_vertical_reverse) {
        loatlistdata( truefalse);
    }  else if (itemid == R.id. action_list_horizontal_reverse) {
        loatlistdata( truetrue);
    }
      return true;
}

5.RecycleView控件初始化,封装RecycleView数据。
public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = (RecyclerView) findViewById(R.id.recycleView);
    }

//recycleView填充数据    参数1,方便控制条目的顺序,参数2:控制RecycleView方向
   private void loatgridedata(boolean b, boolean b1) {
        //集合对象
        ArrayList<DataBean> datas = new ArrayList<>();
        //bean类放数据,最后把装好的bean类放到集合中
        for (int i = 0; i < 35; i++) {
            //bean类进行实例化,这样可以进行调用。
            DataBean dataBean = new DataBean();
            dataBean.icon = android.R.mipmap.sym_def_app_icon;
            dataBean.name "阿三+ i;
            datas.add(dataBean);
        }
    }

6.添加RecycleView的适配器Adapter(RecycleViewAdapter全部代码),注意要指定泛型 一般是类名的ViewHolder继承ViewHolder(内部已实现复用优化机制)
package com.zhiyuan3g.administrator.recycleviewtest.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.zhiyuan3g.administrator.recycleviewtest.DataBean;
import com.zhiyuan3g.administrator.recycleviewtest.R;

import java.util.List;

/**
 * Created by Administrator on 2017.3.13.
 */
//Recycleview,注意制定泛型,一般我们就是类名。ViewHolder继承ViewHolder
public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.ListViewHoulder> {


    private Context context;
    //泛型是指RecycleView所需的bean
    private List<DataBean> dataBean;

    public RecycleAdapter(Context context, List<DataBean> dataBean) {
       this.context = context;
        this.dataBean = dataBean;
    }
    @Override
//    创建ViewHolder,并返回
    public ListViewHoulder onCreateViewHolder(ViewGroup parent, int viewType) {
        //转换一个ViewHolder布局,决定item的样子,参数1,上下文,自定义布局,为null
        View view = View.inflate(this.context, R.layout.activity_itemnull);
        //创建ViewHolder对象
        ListViewHoulder viewHoulder = new ListViewHoulder(view);
        return viewHoulder;
    }
//Viewhoulder和数据绑定时调用
    @Override
    public void onBindViewHolder(ListViewHoulder holder, int position) {
        //从集合里拿到对应item的集合
        DataBean dataBean = this.dataBean.get(position);
//        houlder里面的控件对象设置数据
        holder.setdata(dataBean);
    }


    @Override
    public int getItemCount() {
        //数据不为空
        if (this.dataBean!=null&&dataBean.size()>0){
            return dataBean.size();
        }

        return 0;
    }

    public class ListViewHoulder extends RecyclerView.ViewHolder {
        private    final  ImageView imageView;
        private  final TextView textView;
        public ListViewHoulder(View itemView) {
            super(itemView);
             imageView = (ImageView) itemView.findViewById(R.id.imageView);
           textView= (TextView) itemView.findViewById(R.id.textView);
        }

        public void setdata(DataBean data) {
           imageView.setImageResource(data.icon);
            textView.setText(data.name);
        }
    }
}

7.在Mainactivity中添加适配器,和布局管理器linearlayoutManager
 RecycleAdapter adapter =  new RecycleAdapter( this, datas);
    recyclerView.setAdapter(adapter);

    // 布局管理器
    LinearLayoutManager linearLayoutManager =  new LinearLayoutManager( this);
    // 通过布局管理器可以管理条目顺序, true 反向, false 正常显示 ( 默认 )
    linearLayoutManager.setReverseLayout(vertation);
    // 设置 hrecycleView 方向水平或垂直(默认)
    linearLayoutManager.setOrientation(orientation ? LinearLayoutManager. HORIZONTAL : LinearLayoutManager. VERTICAL);

    recyclerView.setLayoutManager(linearLayoutManager);
}

8.文件目录


9.mainactivity全部代码
package com.zhiyuan3g.administrator.recycleviewtest;

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.Menu;
import android.view.MenuItem;
import android.widget.Toast;

import com.zhiyuan3g.administrator.recycleviewtest.adapter.RecycleAdapter;

import java.util.ArrayList;

public class MainActivity  extends AppCompatActivity {
    private RecyclerView  recyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout. activity_main);
        recyclerView = (RecyclerView) findViewById(R.id. recycleView);
    }

    private void loatlistdata( boolean vertation,  boolean orientation) {
        // 集合对象
        ArrayList<DataBean> datas =  new ArrayList<>();
        // bean 类放数据,最后把装好的 bean 类放到集合中
        for ( int i =  0; i <  35; i++) {
            // bean 类进行实例化,这样可以进行调用。
            DataBean dataBean =  new DataBean();
            // 系统自带图片
            dataBean. icon = android.R.mipmap. sym_def_app_icon;
            dataBean. name " 阿三 + i;
            datas.add(dataBean);
        }
        System. out.println( datas);
        RecycleAdapter adapter =  new RecycleAdapter( this, datas);
        recyclerView.setAdapter(adapter);

        // 布局管理器
        LinearLayoutManager linearLayoutManager =  new LinearLayoutManager( this);
        // 通过布局管理器可以管理条目顺序, true 反向, false 正常显示 ( 默认 )
        linearLayoutManager.setReverseLayout(vertation);
        // 设置 hrecycleView 方向水平或垂直(默认)
        linearLayoutManager.setOrientation(orientation ? LinearLayoutManager. HORIZONTAL : LinearLayoutManager. VERTICAL);

        recyclerView.setLayoutManager(linearLayoutManager);
    }

    //    菜单,方便各种效果的显示
    @Override
// 菜单添加布局
    public boolean onCreateOptionsMenu(Menu menu) {
        // 加载布局,使用菜单特有的方法 getMEnuInflater, inflate 对象,参数一 : 菜单显示布局, 2. 固定 menu
        getMenuInflater().inflate(R.menu. menu_main, menu);

        return true;


    }
// 添加菜单点击事件处理
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int itemid = item.getItemId();
        if (itemid == R.id. action_list_noraml) {
            // 标准显示
            loatlistdata( falsefalse);
            Toast. makeText( this" 标准显示 ", Toast. LENGTH_SHORT).show();
        }  else if (itemid == R.id. action_list_horizontal) {
            loatlistdata( falsetrue);
        }  else if (itemid == R.id. action_list_vertical_reverse) {
            loatlistdata( truefalse);
        }  else if (itemid == R.id. action_list_horizontal_reverse) {
            loatlistdata( truetrue);
        }
        
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值