AdapterView的数据更新

AdapterView的数据更新 在 Android 中,AdapterView(如ListViewGridViewSpinner)的数据更新涉及到数据源的改变以及通知Adapter数据已变化,从而更新视图。以下以ListView为例,介绍AdapterView数据更新的常见方法:

1. 基本步骤

  1. 修改数据源 :首先需要修改用于填充AdapterView的数据源,例如一个ArrayList或其他集合。
  2. 通知 Adapter :数据源改变后,调用AdapternotifyDataSetChanged()方法通知Adapter数据发生了变化,Adapter会重新计算并更新AdapterView的显示。

2. 示例代码

假设我们有一个ListView,使用ArrayAdapter来显示字符串列表。

布局文件(activity_main.xml)

xml

ini 复制代码
<?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"
    android:padding="16dp">

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

    <Button
        android:id="@+id/add_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="添加数据" />
</LinearLayout>

主活动代码(MainActivity.java)

java

java 复制代码
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity extends AppCompatActivity {

    private ListView listView;
    private ArrayAdapter<String> adapter;
    private List<String> dataList = new ArrayList<>();

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

        listView = findViewById(R.id.list_view);
        Button addButton = findViewById(R.id.add_button);

        // 初始化数据源
        dataList.add("第一项");
        dataList.add("第二项");

        // 创建并设置Adapter
        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, dataList);
        listView.setAdapter(adapter);

        addButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 修改数据源
                dataList.add("新的一项");
                // 通知Adapter数据已变化
                adapter.notifyDataSetChanged();
            }
        });

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String item = dataList.get(position);
                Toast.makeText(MainActivity.this, "点击了: " + item, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

在上述代码中,当点击 "添加数据" 按钮时,会向dataList中添加一个新的字符串,然后调用adapter.notifyDataSetChanged()方法通知ArrayAdapter数据已发生变化,ListView会自动更新显示。

3. 其他情况

  • 删除数据 :从数据源中移除相应的数据项,然后同样调用notifyDataSetChanged()方法。例如:

java

ini 复制代码
dataList.remove(position);
adapter.notifyDataSetChanged();
  • 插入数据到指定位置 :在数据源的指定位置插入数据,再调用notifyDataSetChanged()。例如:

java

ini 复制代码
dataList.add(index, newItem);
adapter.notifyDataSetChanged();

如果使用BaseAdapter或自定义的RecyclerView.Adapter,数据更新的原理类似,都是先修改数据源,然后调用相应AdapternotifyDataSetChanged()方法。不过对于RecyclerView.Adapter,还可以使用更细粒度的更新方法,如notifyItemInserted(int position)notifyItemRemoved(int position)等,这些方法可以实现局部刷新,提高性能。例如:

java

scss 复制代码
// RecyclerView.Adapter 更新单个项
dataList.add(index, newItem);
adapter.notifyItemInserted(index);

通过以上方式,可以有效地对AdapterView的数据进行更新,以反映数据源的变化。

相关推荐
雨白7 小时前
优雅地处理协程:取消机制深度剖析
android·kotlin
ajsbxi7 小时前
【Java 基础】核心知识点梳理
java·开发语言·笔记
leon_zeng07 小时前
更改 Android 应用 ID (ApplicationId) 后遭遇记
android·发布
呱呱巨基7 小时前
vim编辑器
linux·笔记·学习·编辑器·vim
新子y7 小时前
【小白笔记】普通二叉树(General Binary Tree)和二叉搜索树的最近公共祖先(LCA)
开发语言·笔记·python
聪明的笨猪猪7 小时前
Java JVM “调优” 面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
爱学习的uu8 小时前
CURSOR最新使用指南及使用思路
人工智能·笔记·python·软件工程
YuCaiH8 小时前
Linux文件处理
linux·笔记·嵌入式
Cathy Bryant8 小时前
大模型损失函数(二):KL散度(Kullback-Leibler divergence)
笔记·神经网络·机器学习·数学建模·transformer
qq_398586548 小时前
Threejs入门学习笔记
javascript·笔记·学习