赞
踩
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:id="@+id/main"
- android:orientation="vertical">
-
- <ListView
- android:id="@+id/lv"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- >
- </ListView>
-
- </LinearLayout>
- <?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="match_parent"
- android:orientation="vertical">
- <TextView
- android:id="@+id/tv"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:textSize="30sp"/>
-
- </LinearLayout>
item.xml
是用于定义列表项布局的 XML 文件。在 Android 中,通常使用 ListView
或 RecyclerView
来显示列表数据,而列表中的每一项就是一个列表项。item.xml
文件用于定义列表中每一项的布局结构,包括显示数据的控件(如 TextView
、ImageView
等)以及它们的样式和排列方式。
在使用 ListView
或 RecyclerView
时,你需要创建一个适配器(Adapter),并在适配器中指定列表项的布局文件(即 item.xml
),以便在列表中显示每一项的内容。适配器根据数据源中的数据,动态地加载布局文件,并将数据填充到布局中,然后显示在列表中。
因此,item.xml
文件的作用是定义列表中每一项的布局结构,它决定了列表中每个数据项的显示样式和内容:
- package com.example.myapplication;
-
- import android.annotation.SuppressLint;
- import android.content.Context;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.TextView;
-
- import java.util.ArrayList;
-
- public class MyAdapter extends BaseAdapter {
- private final ArrayList<bean> data;
- private final Context context;
-
- public MyAdapter(ArrayList<bean> data,Context context)
- {
- this.data = data;
- this.context = context;
- }
- @Override
- public int getCount() {
- return data.size();
- }
-
- @Override
- public Object getItem(int position) {
- return null;
- }
-
- @Override
- public long getItemId(int position) {
- return position;
- }
-
- @SuppressLint("SuspiciousIndentation")
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- ViewHolder viewHolder;
- if (convertView == null) {
- convertView = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
- viewHolder = new ViewHolder();
- viewHolder.textView = convertView.findViewById(R.id.tv);
- convertView.setTag(viewHolder);
- } else {
- viewHolder = (ViewHolder) convertView.getTag();
- }
- viewHolder.textView.setText(data.get(position).getName());
- return convertView;
- }
- static class ViewHolder {
- TextView textView;
- }
-
- }
这段代码是一个自定义的适配器(Adapter),用于将数据绑定到列表视图(ListView)中。逐步解释:
MyAdapter
类继承自 BaseAdapter
,它是 Android 中适配器的基类之一,用于在列表视图中显示数据。MyAdapter(ArrayList<bean> data, Context context)
接收一个 ArrayList
类型的数据源和一个上下文对象。数据源是用来填充列表项的数据,而上下文对象用于加载布局文件。getCount()
方法返回数据源中的数据项数量,即列表中的项数。getItem()
方法根据位置返回数据项。getItemId()
方法返回数据项的唯一标识符,通常是其在数据源中的位置。getView()
方法用于获取每个列表项的视图。它接收三个参数:位置(position)、可重用的视图(convertView)和列表的父视图(parent)。
LayoutInflater
加载列表项的布局文件 R.layout.item
,如果 convertView
为 null,则新建一个视图,并将其缓存在 ViewHolder
对象中,以提高性能。ViewHolder
对象中获取视图控件,并将数据绑定到控件上,设置相应的文本。ViewHolder
类是一个内部静态类,用于缓存列表项中的视图控件,以便在滚动列表时快速访问,提高性能。- package com.example.myapplication;
-
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.AdapterView;
- import android.widget.ListView;
-
- import androidx.activity.EdgeToEdge;
- import androidx.appcompat.app.AppCompatActivity;
- import androidx.core.graphics.Insets;
- import androidx.core.view.ViewCompat;
- import androidx.core.view.WindowInsetsCompat;
- import java.util.ArrayList;
-
- public class MainActivity extends AppCompatActivity {
- private final ArrayList<bean> data = new ArrayList<>();
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- EdgeToEdge.enable(this);
- setContentView(R.layout.activity_main);
- ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
- Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
- v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
- return insets;
- });
- for(int i=0;i<100;i++)
- {
- bean bn = new bean();
- bn.setName("WJH"+i);
- data.add(bn);
- }
- ListView listview = findViewById(R.id.lv);
- listview.setAdapter(new MyAdapter(data,this));
- }
-
- }
MainActivity
类继承自 AppCompatActivity
,它是 Android 中的一个活动(Activity)类,用于展示用户界面和处理用户交互。onCreate()
方法中,首先调用了父类的 onCreate()
方法以执行基本的初始化操作。EdgeToEdge.enable(this)
方法启用了边缘到边缘布局,该方法来自于第三方库,用于在 Android 应用中实现全屏显示。setContentView(R.layout.activity_main)
方法设置了当前活动的布局为 activity_main.xml
。ViewCompat.setOnApplyWindowInsetsListener()
方法监听窗口布局变化,并在发生变化时调整主布局的内边距,以适应系统状态栏和导航栏。bean
对象(自定义对象)的 ArrayList
,用于作为列表视图的数据源。for
循环生成 100 个 bean
对象,并设置它们的名称。ListView
并通过 findViewById()
方法找到对应的视图。MyAdapter
将数据源绑定到列表视图上,从而在界面上显示出来。综上所述,这段代码实现了一个简单的活动,在界面中显示了一个包含 100 个列表项的列表视图,并且使用了边缘到边缘布局来实现全屏显示效果。
适配器类的作用是:
数据适配: Adapter类用于将数据源与UI控件进行绑定,将数据适配到特定的UI组件中,比如ListView、RecyclerView等。它负责从数据源中获取数据,并将数据呈现到相应的UI组件上。
视图渲染: Adapter负责渲染数据项的视图,即将数据显示在UI组件上。在Adapter中,通过实现getView()方法,可以定义每个数据项的呈现方式,包括布局、样式、内容等。
视图复用: 为了提高性能和节省资源,Android中的ListView、RecyclerView等UI组件在滚动时会复用已经创建的视图对象。Adapter类负责管理视图的创建和复用,确保在滚动过程中能够高效地显示数据。
ViewHolder模式: 为了进一步提高性能,Adapter类通常会采用ViewHolder模式对视图进行缓存。ViewHolder是一个简单的Java类,用于保存视图对象的引用,避免在getView()方法中重复查找视图,从而提高渲染效率。
数据更新: 当数据源发生变化时,Adapter负责通知UI组件进行相应的更新。它提供了一系列的方法,比如notifyDataSetChanged()、notifyItemInserted()等,用于通知UI组件刷新数据。
总的来说,Adapter类在Android开发中起到了桥梁的作用,连接了数据源和UI组件,负责将数据呈现到界面上,并提供了一系列的方法和机制,保证了界面的流畅性和用户体验
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。