You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中向RecyclerView的ArrayAdapter添加20门课程遇阻

解决RecyclerView加载课程列表的问题

嘿,我来帮你搞定这个RecyclerView的问题!首先得纠正一个小误区:RecyclerView并不使用ArrayAdapter,它有自己专属的Adapter体系,这可能是你之前卡住的核心原因。下面我一步步带你实现20门课程的列表展示,包括数据存储、适配器配置和数据更新的完整流程:

第一步:创建课程数据模型类

首先我们需要一个Course类来统一存储每门课程的信息,把你需要展示的字段(比如课程名、老师、学分、简介等)都封装进去:

// 这里以Kotlin为例,Java语法逻辑类似
data class Course(
    val id: Int,
    val courseName: String,
    val teacherName: String,
    val credit: Float,
    val description: String
)

第二步:创建RecyclerView的Item布局

在res/layout目录下新建item_course.xml,定义单个课程项的UI样式,比如:

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

    <TextView
        android:id="@+id/tv_course_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textStyle="bold"/>

    <TextView
        android:id="@+id/tv_teacher"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:textColor="@android:color/darker_gray"
        android:layout_marginTop="4dp"/>

    <TextView
        android:id="@+id/tv_credit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:layout_marginTop="4dp"/>

</LinearLayout>

第三步:自定义RecyclerView Adapter

创建CourseAdapter类,继承自RecyclerView.Adapter,同时实现ViewHolder来绑定Item布局的控件:

class CourseAdapter(private val courseList: MutableList<Course>) : RecyclerView.Adapter<CourseAdapter.CourseViewHolder>() {

    // 创建ViewHolder,加载Item布局
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CourseViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_course, parent, false)
        return CourseViewHolder(view)
    }

    // 绑定数据到ViewHolder的控件上
    override fun onBindViewHolder(holder: CourseViewHolder, position: Int) {
        val course = courseList[position]
        holder.tvCourseName.text = course.courseName
        holder.tvTeacher.text = "授课老师:${course.teacherName}"
        holder.tvCredit.text = "学分:${course.credit}"
    }

    // 返回列表总数量
    override fun getItemCount(): Int = courseList.size

    // 添加单个课程的方法
    fun addCourse(course: Course) {
        courseList.add(course)
        // 通知适配器更新单个Item,比notifyDataSetChanged更高效
        notifyItemInserted(courseList.size - 1)
    }

    // 添加多个课程的方法
    fun addAllCourses(courses: List<Course>) {
        val startPosition = courseList.size
        courseList.addAll(courses)
        notifyItemRangeInserted(startPosition, courses.size)
    }

    // ViewHolder类,绑定Item布局的控件
    inner class CourseViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val tvCourseName: TextView = itemView.findViewById(R.id.tv_course_name)
        val tvTeacher: TextView = itemView.findViewById(R.id.tv_teacher)
        val tvCredit: TextView = itemView.findViewById(R.id.tv_credit)
    }
}

第四步:在Activity/Fragment中初始化RecyclerView并加载数据

回到你的主页面,初始化RecyclerView,创建课程数据集合,然后关联适配器:

class CourseListActivity : AppCompatActivity() {
    private lateinit var recyclerView: RecyclerView
    private lateinit var courseAdapter: CourseAdapter
    // 存储20门课程的集合
    private val courseList = mutableListOf<Course>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_course_list)

        // 初始化RecyclerView
        recyclerView = findViewById(R.id.recycler_view)
        // 设置布局管理器,这里用垂直线性布局
        recyclerView.layoutManager = LinearLayoutManager(this)
        // 创建适配器并传入数据集合
        courseAdapter = CourseAdapter(courseList)
        recyclerView.adapter = courseAdapter

        // 加载20门课程数据
        load20Courses()
    }

    private fun load20Courses() {
        // 循环生成20门示例课程,你可以替换成真实的院系课程数据
        for (i in 1..20) {
            val course = Course(
                id = i,
                courseName = "计算机${i}级课程",
                teacherName = "李教授",
                credit = 3.0f,
                description = "这是计算机学院第${i}门专业核心课程"
            )
            // 单个添加到适配器
            courseAdapter.addCourse(course)
        }
        // 如果你有现成的课程列表,也可以一次性添加:
        // courseAdapter.addAllCourses(yourCourseList)
    }
}

你之前问题的核心原因解析

你提到“尝试使用ArrayAdapter却不知道如何添加课程”,是因为ArrayAdapter是为ListView设计的,和RecyclerView的适配逻辑完全不兼容。现在用自定义的CourseAdapter,我们通过addCourse或addAllCourses方法就能轻松把课程数据加入适配器,数据会自动同步到RecyclerView上,同时课程数据也会被妥善存储在courseList集合中。

如果后续需要实现点击课程跳转到详情页的功能,还可以在Adapter里添加点击监听接口,有需要可以再问~

内容的提问来源于stack exchange,提问作者Euriloco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:56:13