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的数据进行更新,以反映数据源的变化。

相关推荐
胖虎12 分钟前
Android Studio 读取本地文件(以 ZIP 为例)
android·ide·android studio·本地文件·读取本地文件
出海小纸条2 分钟前
Google Play 跨应用脚本漏洞(Cross-App Scripting)
android
小孔龙5 分钟前
Android Runtime(ART) GC 日志手册
android
袁美丽..7 分钟前
Android --- SystemUI 导入Android Studio及debug
android·ide·android studio
袁美丽..19 分钟前
Android studio的adb和终端的adb互相抢占端口
android·adb·android studio
鹏多多.1 小时前
flutter-使用fluttertoast制作丰富的高颜值toast
android·前端·flutter·ios
致***锌1 小时前
期权平仓后权利金去哪了?
笔记
守城小轩2 小时前
Firefox Android 开发环境搭建全流程(四)
android·firefox·chrome devtools·指纹浏览器·浏览器开发
袁美丽..2 小时前
Android --- AOSP源码导入Android Studio
android·android studio
LiuYaoheng2 小时前
【Android】View 的基础知识
android·java·笔记·学习