有没有办法替换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());
}
如果我希望替换其中一个条目,有任何方法可以不删除和重新输入。 问题在于它将它放在最底层。
答案 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)
否您可以在不删除或重新插入的情况下进行替换。