android ArrayAdapter项目更新

时间:2012-02-21 15:56:22

标签: android android-arrayadapter

我有ArrayAdapter这个项目结构:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout ... >

         <TextView
             android:id="@+id/itemTextView"
             ... />
</RelativeLayout>

然后添加此适配器:

mAdapter = new ArrayAdapter<String>(this, R.layout.item, 
                                            R.id.itemTextView, itemsText);

一切都很好,但我想更新适配器项目中的文本。我找到了解决方案

mAdapter.notifyDataSetChanged();

但不明白如何使用它。请帮助。

UPD 我的代码:

String[] itemsText = {"123", "345", "567"};
ArrayAdapter<String> mAdapter;

的onCreate

mAdapter = new ArrayAdapter<String>(this, R.layout.roomitem, 
                                              R.id.itemTextView, itemsText);
setListAdapter(mAdapter);
itemsText = {"789", "910", "1011"};

的onClick

mAdapter.notifyDataSetChanged();
//it's dont work

4 个答案:

答案 0 :(得分:39)

您的问题是指针的典型Java错误。

在第一步中,您将创建一个数组并将此数组传递给适配器。

在第二步中,您将创建一个新数组(因此创建了新指针),其中包含新信息,但适配器仍指向原始数组。

// init itemsText var and pass to the adapter
String[] itemsText = {"123", "345", "567"};
mAdapter = new ArrayAdapter<String>(..., itemsText);

//ERROR HERE: itemsText variable will point to a new array instance
itemsText = {"789", "910", "1011"};

因此,您可以做两件事,一是更新数组内容而不是创建一个新内容:

//This will work for your example
items[0]="123";
items[1]="345";
items[2]="567";

...或者我会做什么,使用List,例如:

List<String> items= new ArrayList<String>(3);
boundedDevices.add("123");
boundedDevices.add("456");
boundedDevices.add("789");

在更新中:

boundedDevices.set("789");
boundedDevices.set("910");
boundedDevices.set("1011");

要添加更多信息,通常在实际应用程序中使用来自服务或内容提供商的信息更新列表适配器的内容,因此通常更新您将执行以下操作的项目:

//clear the actual results
items.clear()

//add the results coming from a service
items.addAll(serviceResults);

使用此功能,您将清除旧结果并加载新结果(认为新结果应具有不同数量的项目。)

在将数据更新为notifyDataSetChanged();

的数据后,当然不会

如果您有任何疑问,请随时发表评论。

答案 1 :(得分:37)

我觉得这样的事情

public void updatedData(List itemsArrayList) {

    mAdapter.clear(); 

    if (itemsArrayList != null){

        for (Object object : itemsArrayList) {

            mAdapter.insert(object, mAdapter.getCount());
        }
    }

    mAdapter.notifyDataSetChanged();

}

答案 2 :(得分:4)

假设itemTexts为String数组或String ArrayList,您可以在此之后的itemsTextat中添加新项目,您可以调用

mAdapter.notifyDataSetChanged();

如果你没有得到答案,请提供一些代码。

答案 3 :(得分:0)

我做了这样的事情。而且可以正常工作。

将方法添加到Adapter类:

public void updateList(ArrayList<ITEM> itemList){
        this.itemList.clear();
        this.adapterList = new ArrayList<ITEM>();
        this.adapterList .addAll(itemList);

        notifyDataSetChanged();
    }

在使用适配器的类中调用方法:

itemList.add(item);
adapter.updateList(itemList);