安卓基础(Adapter)

想象一下,你有一堆玩具(数据),这些玩具很特别,每个玩具都是不同的,可能有汽车、飞机、积木等。现在,你想把这些玩具摆放到一个展示柜(显示的界面)里,给大家看。

但问题是,展示柜本身不懂这些玩具,所以你需要一个"搬运工"(Adapter)来帮助你。搬运工的工作就是把每个玩具拿到展示柜里,而且要保证玩具不会乱掉,摆得又整齐又好看。

搬运工的任务就是:

  1. 拿到玩具:搬运工要知道这些玩具是什么样的(就是数据)。
  2. 放到展示柜里:把玩具按顺序摆好,确保大家能看到(就是显示在界面上)。

在 Android 编程中,Adapter 就是这个"搬运工",它帮助你把数据(比如一串文字、图片或者信息)摆放到屏幕上,显示给用户看。比如当你在手机上看到一个联系人列表时,Adapter 就是把这些联系人的名字、电话等信息展示出来的"搬运工"。

例子:

假设你有一些水果,想放到一个水果篮里给朋友们看:

  1. 水果(数据):苹果、香蕉、橙子。
  2. 水果篮(界面):就是一个可以装水果的容器。
  3. 搬运工(Adapter):帮你把水果一个个放到篮子里,确保每个水果都有地方放,大家也能清楚看到。

就是这么简单!Adapter 就是帮助我们把数据放到界面上的"搬运工"。

水果列表: ["苹果", "香蕉", "橙子"]
显示结果:
----------------------
| 苹果               |
----------------------
| 香蕉               |
----------------------
| 橙子               |
----------------------

设置 ListView

现在我们要把这个 Adapter 设置给一个 ListView,这样水果的名字就会在界面上显示出来。

// MainActivity.java
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 准备数据
        List<String> fruitList = new ArrayList<>();
        fruitList.add("苹果");
        fruitList.add("香蕉");
        fruitList.add("橙子");

        // 创建Adapter并设置到ListView
        FruitAdapter adapter = new FruitAdapter(this, fruitList);
        ListView listView = findViewById(R.id.fruit_list);
        listView.setAdapter(adapter);
    }
}

setContentView 就是将你编写的布局文件 activity_main.xml 显示出来,形成应用的界面。

设置 ListView 在界面中显示:

<!-- activity_main.xml -->
<ListView
    android:id="@+id/fruit_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

2. ListView简单使用

ListView 是用于显示垂直滚动列表的控件,它会通过适配器(Adapter)来管理数据源。

基本使用:
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MyAdapter extends BaseAdapter {
    private Context context;  // 上下文对象,用来获取系统资源
    private String[] data;    // 数据源

    // 构造函数,传入上下文和数据源
    public MyAdapter(Context context, String[] data) {
        this.context = context;
        this.data = data;
    }

    @Override
    public int getCount() {
        return data.length;  // 返回数据源的长度
    }

    @Override
    public Object getItem(int position) {
        return data[position];  // 返回指定位置的数据项
    }

    @Override
    public long getItemId(int position) {
        return position;  // 返回数据项的 ID,这里简单地使用位置作为 ID
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // 如果 convertView 为空,说明需要重新创建视图
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1, parent, false);
        }

        // 获取 TextView 控件,并设置文本内容
        TextView textView = convertView.findViewById(android.R.id.text1);
        textView.setText(data[position]);

        return convertView;  // 返回生成的视图
    }
}

public class MainActivity extends AppCompatActivity {

    private ListView listView;
    private String[] data = {"Item 1", "Item 2", "Item 3", "Item 4"};

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

        listView = findViewById(R.id.listView);
        MyAdapter adapter = new MyAdapter(this, data);
        listView.setAdapter(adapter);
    }
}

显示主要活动布局,找到ListView,ListView设置适配器

在布局文件 (activity_main.xml) 中:

<ListView
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

MyAdapter 中实现 getCount() 方法:

ListView listView = findViewById(R.id.listView);
MyAdapter adapter = new MyAdapter(this, data);
listView.setAdapter(adapter);

// 这里不会直接调用 listView.getCount(),但它实际上会通过适配器的 getCount() 来确定数量
int itemCount = adapter.getCount();  // 这里通过适配器手动调用
Log.d("Item count", "The list has " + itemCount + " items.");
相关推荐
小猫猫猫◍˃ᵕ˂◍27 分钟前
备忘录模式:快速恢复原始数据
android·java·备忘录模式
CYRUS_STUDIO2 小时前
使用 AndroidNativeEmu 调用 JNI 函数
android·逆向·汇编语言
梦否2 小时前
【Android】类加载器&热修复-随记
android
徒步青云3 小时前
Java内存模型
android
今阳3 小时前
鸿蒙开发笔记-6-装饰器之@Require装饰器,@Reusable装饰器
android·app·harmonyos
-优势在我8 小时前
Android TabLayout 实现随意控制item之间的间距
android·java·ui
hedalei8 小时前
android13修改系统Launcher不跟随重力感应旋转
android·launcher
Indoraptor9 小时前
Android Fence 同步框架
android
峥嵘life9 小时前
DeepSeek本地搭建 和 Android
android
叶羽西9 小时前
Android14 Camera框架中Jpeg流buffer大小的计算
android·安卓