替换ArrayAdapter中的条目

时间:2012-03-26 07:54:41

标签: android android-arrayadapter

有没有办法替换ArrayAdapter中的值

mPairedDevicesArrayAdapter = new ArrayAdapter<String>(this, R.layout.device_name);
..
..
for (BluetoothDevice device : pairedDevices) {
    String name = MPGDeviceDetailsControl.getDeviceDetails(this, device.getAddress(), device.getName()).getDisplayName();
    mPairedDevicesArrayAdapter.add(name + "\n" + device.getAddress());
}

如果我希望替换其中一个条目,有任何方法可以不删除和重新输入。 问题在于它将它放在最底层。

3 个答案:

答案 0 :(得分:14)

这样的东西应该可以替换物品

int i = 0;
for (BluetoothDevice device : pairedDevices) {
    String name = MPGDeviceDetailsControl.getDeviceDetails(this, device.getAddress(), device.getName()).getDisplayName();
    mPairedDevicesArrayAdapter.remove(name); // has to copy all items back 1 position
    mPairedDevicesArrayAdapter.insert(name + "\n" + device.getAddress(), i); // copy them +1 again
    i++;
}

但如果您可以访问支持此ArrayAdapter的List并替换/修改它,那么效率会更高。

ArrayList<Strign> mList = new ArrayList<String>();
mPairedDevicesArrayAdapter = new ArrayAdapter<String>(this, R.layout.device_name, mList);

// setup
mList.add...
mPairedDevicesArrayAdapter.notifyDatasetChanged();

// change something
mList.set(i, newValue); // just a replace, no copy
mPairedDevicesArrayAdapter.notifyDatasetChanged();

答案 1 :(得分:0)

可以在不重新插入和使用嵌套适配器的情况下替换显示值。只需更改原始集合并调用适配器的notifyDatasetChanged()

即可
//adapter initialization
MyClass[] someArray = ... ;
ArrayList<Strign> adapter = new ArrayList<String>(context, R.layout.item_layout, someArray);

//change something
someArray[i] = newValue;
adapter.notifyDatasetChanged();

它与zapl的答案几乎相同,只是它不使用嵌套适配器。当使用List初始化适配器时它应该工作相同但我没有测试过。

答案 2 :(得分:-4)

否您可以在不删除或重新插入的情况下进行替换。