Заменить запись в ArrayAdapter - PullRequest
3 голосов
/ 26 марта 2012

Есть ли способ заменить значение в 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 ]

14 голосов
/ 26 марта 2012

Что-то вроде этого должно работать, чтобы заменить предметы

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, и заменить / изменить его.

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();
0 голосов
/ 10 сентября 2012

Можно заменить отображаемое значение, не вставляя повторно и не используя вложенные адаптеры.Просто измените исходную коллекцию и вызовите адаптер 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, но я этого не проверял.

0 голосов
/ 26 марта 2012

Нет Вы можете заменить без удаления или повторной установки.

...