首页 > 解决方案 > 数组适配器中的 notifyDataSetChanged 和 add(T object) 或 addAll(T... items) 方法有什么区别?

问题描述

我正在尝试学习列表视图和适配器,制作了一个非常基本的应用程序来学习,其中我有一个按钮,可以将字符串对象插入数组适配器的数据源,另一个视图是显示此数据集的列表视图。add() 和 addAll() 方法将数据附加到数据集中,但是当我这样做时,列表视图会显示它,但我没有调用 notifyDataSetChanged 方法,那么为什么列表视图会自行刷新,如果它这样做了,那么我为什么需要方法?谁能帮我澄清一下?add()、addAll() 和 insert() 方法已经使列表视图显示新添加的数据,但如何?那么有什么区别呢?

该应用程序的唯一布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
android:padding="8dp">

<Button
    android:id="@+id/insert_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="8dp"
    android:text="insert data"/>

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

</LinearLayout>

主要活动代码:

package famiddle.smart.apps.learningandroid;

import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
Button insertButton;
ArrayAdapter<String> adapter;

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

    ArrayList<String> data = new ArrayList<>();
    data.add("hello world");
    ListView listView = findViewById(R.id.list_view);
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);
    listView.setAdapter(adapter);

    insertButton = findViewById(R.id.insert_button);
    insertButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           adapter.add("hi there");
        }
    });


}

}

标签: androidlistviewandroid-adapter

解决方案


推荐阅读