更加强大的滚动控件RecyclerView 的应用(一)

本文详细介绍了Android中RecyclerView的使用方法,包括其相对于ListView的优势、依赖包导入、页面布局、适配器及数据Bean的创建,以及MainActivity中的代码实现。

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

更加强大的滚动控件RecyclerView

Android提供的RecyclerView的滚动控件,它是增强版的ListView,不仅可以轻松的实现和ListView同样的效果,还优化了ListView中存在的各种不足。Android官方更加推荐使用RecyclerView,未来也会更多的程序从逐渐ListView转向RecyclerView,接下实现了简单的ListView展示的效果。接下来贴代码。

导入依赖包


implementation 'com.android.support:recyclerview-v7:28.0.0'

页面布局部分

activity_mian.xml布局部分


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

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

item_list_view.xml里面的设置

// An highlighted block
<?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="90dp">

    <ImageView
        android:id="@+id/list_view_icon"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:layout_margin="10dp"
        android:scaleType="fitXY"
        android:src="@mipmap/pic_01"
        />
    <TextView
        android:id="@+id/list_view_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="20dp"
        android:layout_toRightOf="@+id/list_view_icon"
        android:text="我是标题"
        android:textSize="30sp"
        />
    
</RelativeLayout>

这里放一个图片和一个标题

适配器adapter

package com.test.myapplication.adapters;

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.test.myapplication.R;
import com.test.myapplication.beans.ItemBean;

import java.util.List;

public class ListViewAdapter extends RecyclerView.Adapter<ListViewAdapter.InnerHolder>{

    private final List<ItemBean> mData;

    public ListViewAdapter(List<ItemBean> data){
        this.mData = data;
    }

    /**
     * 内部创建数据view
     * @param viewGroup
     * @param i
     * @return
     */
    @NonNull
    @Override
    public InnerHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        //传进去的这个view的界面 1.拿到view 2.创建InnerHolder
        View view = View.inflate(viewGroup.getContext(), R.layout.item_list_view,null);
        return new InnerHolder(view);
    }

    /**
     * 绑定内部 InnerHolder ,用于设置数据的
     * @param innerHolder
     * @param i
     */
    @Override
    public void onBindViewHolder(@NonNull InnerHolder innerHolder, int i) {
        //设置数据
        innerHolder.setData(mData.get(i));
    }

    /**
     * 返回数据个数
     * @return
     */
    @Override
    public int getItemCount() {
        if (mData != null) {
            return  mData.size();
        }
        return 0;
    }

    public class InnerHolder extends RecyclerView.ViewHolder {

        private final ImageView mIcon;
        private final TextView mTitle;

        //找到list 里面的界面元素
        public InnerHolder(@NonNull View itemView) {
            super(itemView);
            mIcon = itemView.findViewById(R.id.list_view_icon);
            mTitle = itemView.findViewById(R.id.list_view_title);
        }

        //设置数据
        public void setData(ItemBean itemBean) {
            mIcon.setImageResource(itemBean.getIcon());
            mTitle.setText(itemBean.getTitle());
        }
    }


}


数据bean部分


package com.test.myapplication.beans;

public class ItemBean {

    private int icon;
    private String title;

    public int getIcon() {
        return icon;
    }

    public void setIcon(int icon) {
        this.icon = icon;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    @Override
    public String toString() {
        return "ItemBean{" +
                "icon=" + icon +
                ", title='" + title + '\'' +
                '}';
    }
}

获取照片的类

package com.test.myapplication.beans;


import com.test.myapplication.R;

public class Datas {
    public static int[] icons = {
            R.mipmap.pic_01,
            R.mipmap.pic_02,
            R.mipmap.pic_03,
            R.mipmap.pic_04,
            R.mipmap.pic_11,
            R.mipmap.pic_05,
            R.mipmap.pic_06,
            R.mipmap.pic_07,
            R.mipmap.pic_08,
            R.mipmap.pic_09,
            R.mipmap.pic_10,
            R.mipmap.pic_03,
            R.mipmap.pic_03,
            R.mipmap.pic_04,
            R.mipmap.pic_05,
            R.mipmap.pic_06,
            R.mipmap.pic_07,
            R.mipmap.pic_03,
            R.mipmap.pic_04,
            R.mipmap.pic_05,
            R.mipmap.pic_06,
            R.mipmap.pic_07,
            R.mipmap.pic_08,
            R.mipmap.pic_09,
            R.mipmap.pic_10,
            R.mipmap.pic_11,
            R.mipmap.pic_11,
            R.mipmap.pic_08,
            R.mipmap.pic_09,
            R.mipmap.pic_10,
            R.mipmap.pic_11,
            R.mipmap.pic_05,
            R.mipmap.pic_06,
            R.mipmap.pic_07,
            R.mipmap.pic_08,
            R.mipmap.pic_09,
            R.mipmap.pic_10,
            R.mipmap.pic_03,
            R.mipmap.pic_04,
            R.mipmap.pic_05,
            R.mipmap.pic_06,
            R.mipmap.pic_07,
            R.mipmap.pic_08,
            R.mipmap.pic_09,
            R.mipmap.pic_10,
            R.mipmap.pic_11,
            R.mipmap.pic_11,
            R.mipmap.pic_12};
}


将图片放入res 包中的mipmap-hdpi 将图片数据初始化

剩下的就是MainActivity中的代码了

package com.test.myapplication;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
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 android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import com.test.myapplication.adapters.ListViewAdapter;
import com.test.myapplication.beans.Datas;
import com.test.myapplication.beans.ItemBean;

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

public class MainActivity extends AppCompatActivity {

    private static final String TAG ="MainActivity" ;
    private RecyclerView mList;
    private List<ItemBean> mDatas;

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

        mList = findViewById(R.id.recycler_view);

        //数据
        initData();
    }

    //初始化数据
    private void initData() {

        mDatas = new ArrayList<>();

        for (int i = 0; i < Datas.icons.length ; i++) {

            ItemBean  itemBean = new ItemBean();
            itemBean.setIcon(Datas.icons[i]);
            itemBean.setTitle("我是第"+i+"条数据");
            mDatas.add(itemBean);
        }
        //设置样式
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        mList.setLayoutManager(linearLayoutManager);
        //创建适配器
        ListViewAdapter adapter = new ListViewAdapter(mDatas);
        //设置到RecyclerView
        mList.setAdapter(adapter);
        
    }
  
}


总结

这就是RecyclerView的像ListView的显示部分,代码已经完成了这些的第一部分,如果有什么bug,或者错误的地方请指正出来,谢谢大家。

基于Spring Boot搭建的个多功能在线学习系统的实现细节。系统分为管理员和用户两个主要模块。管理员负责视频、文件和文章资料的管理以及系统运营维护;用户则可以进行视频播放、资料下载、参与学习论坛并享受个性化学习服务。文中重点探讨了文件下载的安全性和性能优化(如使用Resource对象避免内存溢出),积分排行榜的高效实现(采用Redis Sorted Set结构),敏感词过滤机制(利用DFA算法构建内存过滤树)以及视频播放的浏览器兼容性解决方案(通过FFmpeg调整MOOV原子位置)。此外,还提到了权限管理方面自定义动态加载器的应用,提高了系统的灵活性和易用性。 适合人群:对Spring Boot有定了解,希望深入理解其实际应用的技术人员,尤其是从事在线教育平台开发的相关从业者。 使用场景及目标:适用于需要快速搭建稳定高效的在线学习平台的企业或团队。目标在于提供套完整的解决方案,涵盖从资源管理到用户体验优化等多个方面,帮助开发者好地理解和掌握Spring Boot框架的实际运用技巧。 其他说明:文中不仅提供了具体的代码示例和技术思路,还分享了许多实践经验教训,对于提高项目质量有着重要的指导意义。同时强调了安全性、性能优化等方面的重要性,确保系统能够应对大规模用户的并发访问需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值