Android一些基础-06-一个列表的基本写法

一个列表的基本写法

第一步:创建列表单元格,创建 layout xml 文件,其中实现单元格的布局,举例 :使用 CardView 写个 item

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>  
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="wrap_content"  
    android:layout_margin="5dp"  
    app:cardBackgroundColor="#facd4e"  
    xmlns:app="http://schemas.android.com/apk/res-auto"  
    android:id="@+id/card_view">  
    <androidx.constraintlayout.widget.ConstraintLayout  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:padding="16dp"  
  
        >  
        <TextView  
            android:id="@+id/list_title"  
            android:layout_width="0dp"  
            android:layout_height="wrap_content"  
            android:textSize="18sp"  
            app:layout_constraintStart_toStartOf="parent"  
            app:layout_constraintEnd_toEndOf="parent"  
            app:layout_constraintTop_toTopOf="parent"  
            >  
        </TextView>  
        <TextView  
            android:id="@+id/list_detail"  
            android:layout_width="0dp"  
            android:layout_height="wrap_content"  
            app:layout_constraintTop_toBottomOf="@id/list_title"  
            app:layout_constraintStart_toStartOf="parent"  
            app:layout_constraintEnd_toEndOf="parent"  
            app:layout_constraintBottom_toBottomOf="parent"  
            android:textSize="14sp"  
            android:layout_marginTop="5dp"  
            >  
  
        </TextView>  
  
    </androidx.constraintlayout.widget.ConstraintLayout>  
  
</androidx.cardview.widget.CardView>

第二步:创建继承自 RecyclerView.Adapter<RecyclerAdapter.ViewHolder> 的 adapter 创建 ViewHolder 静态类用于获取刚刚创建的单元格中的组件

重写 onCreateViewHolder 方法设置布局文件的视图到 ViewHolder 上

重写 onBindViewHolder 方法进行对组件数据的绑定

重写 getItemCount 方法返回单元格数量

java 复制代码
package com.example.basepractice.baseUI.demo3;  
  
import android.view.LayoutInflater;  
import android.view.View;  
import android.view.ViewGroup;  
import android.widget.TextView;  
  
import androidx.annotation.NonNull;  
import androidx.recyclerview.widget.RecyclerView;  
  
import com.example.basepractice.R;  
  
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {  
  
    private String[] data = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"};  
    private String[] dataDetail = {"day1", "day2", "day3", "day4", "day5", "day6", "day7", "day8", "day9", "day10"};  
  
    public static class ViewHolder extends RecyclerView.ViewHolder {  
        public TextView listTitleTxt;  
        public TextView listDetailTxt;  
        public ViewHolder(@NonNull View itemView) {  
            super(itemView);  
            listTitleTxt = itemView.findViewById(R.id.list_title);  
            listDetailTxt = itemView.findViewById(R.id.list_detail);  
  
        }  
    }  
  
    @NonNull  
    @Override    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {  
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_layout, parent, false);  
        return new ViewHolder(view);  
    }  
  
    @Override  
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {  
        holder.listTitleTxt.setText(data[position]);  
        holder.listDetailTxt.setText(dataDetail[position]);  
    }  
  
    @Override  
    public int getItemCount() {  
        return data.length;  
    }  
}

第三步:在相关 Activity 创建 RecyclerView LayoutManageradapter 创建 RecyclerView 然后创建 LayoutManager选择是线性、表格或者瀑布流,构造函数的参数 context 传 this
RecyclerView 再设置 LayoutManagerRecyclerView

再创建 Adapter 把 adapter 设置到 RecyclerView

java 复制代码
package com.example.basepractice.baseUI.demo3;  
  
import android.os.Bundle;  
  
import androidx.activity.EdgeToEdge;  
import androidx.appcompat.app.AppCompatActivity;  
import androidx.constraintlayout.widget.ConstraintLayout;  
import androidx.core.graphics.Insets;  
import androidx.core.view.ViewCompat;  
import androidx.core.view.WindowInsetsCompat;  
import androidx.recyclerview.widget.LinearLayoutManager;  
import androidx.recyclerview.widget.RecyclerView;  
  
import com.example.basepractice.R;  
import com.example.basepractice.baseUI.basic.BasicActivity;  
  
public class Demo3Activity extends BasicActivity {  
    private RecyclerView recyclerView;  
    private RecyclerView.LayoutManager layoutManager;  
  
    private RecyclerAdapter adapter;  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        EdgeToEdge.enable(this);  
        setContentView(R.layout.activity_demo3);  
  
        recyclerView = findViewById(R.id.list_view);  
  
        layoutManager = new LinearLayoutManager(this);  
  
        recyclerView.setLayoutManager(layoutManager);  
  
        adapter = new RecyclerAdapter();  
  
        recyclerView.setAdapter(adapter);  
    }  
}

运行效果

AppBar

AppBar 是当应用运行时出现在屏幕顶部的区域,可配置为包含各种不同的项目,包括状态栏 status Bar、工具栏 tool bar、标签栏 tabbar 和一个灵活空间区域。

如果需要 AppBar 跟随 RecyclerView 一起滚动或者进行折叠,则 AppBarLayoutRecyclerView 必须放在 CoordinatorLayout

原因:1. 嵌套滑动机制依赖 CoordinatorLayout:
CoordinatorLayout 是 Android 中实现复杂联动交互的核心容器,其核心能力在于通过 Behavior 机制协调子视图的滚动行为。

嵌套滑动事件分发:CoordinatorLayout 负责将 RecyclerView 的滑动事件传递给 AppBarLayout,并通过 AppBarLayout.Behavior 触发折叠动画。若使用 ConstraintLayout,因缺乏 Behavior 机制,无法实现滑动联动

滚动标志生效条件:AppBarLayout 的子视图(如 Toolbar)必须设置 app:layout_scrollFlags,但这些标志仅在 AppBarLayout 是 CoordinatorLayout 的直接子视图时生效

2.布局层级与事件协调: 直接父子关系要求AppBarLayout 必须作为 CoordinatorLayout 的直接子视图,否则无法通过 app:layout_behavior 关联 RecyclerView 的滚动行为。若将 RecyclerView 放在 ConstraintLayout 中,事件分发链路会被破坏,导致联动失效
高度计算逻辑CoordinatorLayout 的测量过程会动态调整 RecyclerView 的高度,使其适配 AppBarLayout 的折叠状态。而 ConstraintLayout 的静态布局规则无法处理此类动态高度变化

app:layout_scrollFlags 属性

app:layout_scrollFlags 是 Android Material Design 中用于控制 AppBarLayout 子视图(如 ToolbarCollapsingToolbarLayout)与可滚动视图(如 RecyclerViewNestedScrollView)联动滚动的核心属性。

注意事项:
AppBarLayout 必须嵌套在 CoordinatorLayout 内。

可滚动视图需设置 app:layout_behavior="@string/appbar_scrolling_view_behavior"

相关推荐
daifgFuture2 小时前
Android 3D球形水平圆形旋转,旋转动态更换图片
android·3d
二流小码农3 小时前
鸿蒙开发:loading动画的几种实现方式
android·ios·harmonyos
爱吃西红柿!4 小时前
fastadmin fildList 动态下拉框默认选中
android·前端·javascript
悠哉清闲4 小时前
工厂模式与多态结合
android·java
大耳猫5 小时前
Android SharedFlow 详解
android·kotlin·sharedflow
火柴就是我6 小时前
升级 Android Studio 后报错 Error loading build artifacts from redirect.txt
android
androidwork7 小时前
掌握 MotionLayout:交互动画开发
android·kotlin·交互
奔跑吧 android7 小时前
【android bluetooth 协议分析 14】【HFP详解 1】【案例一: 手机侧显示来电,但车机侧没有显示来电: 讲解AT+CLCC命令】
android·hfp·aosp13·telecom·ag·hf·headsetclient
Chenyu_3108 小时前
09.MySQL内外连接
android·数据库·mysql
砖厂小工8 小时前
Kotlin Flow 全面解析:从基础到高级
android