У меня есть массив: Object[] array
и адаптер массива, который расширяет ArrayAdapter<Object>
. Когда я пытаюсь удалить из него с помощью adapter.remove(Object obj)
, я получаю исключение UnsupportedOperationException
, так же как this post. В предлагаемых ответах рекомендуется использовать ArrayList. Это не вариант для меня. Мне нужно придерживаться массива. Поэтому я скопировал массив в другой массив, но без элемента, который я хочу удалить. Тогда я только что сделал:Удаление элемента из ArrayAdapter
oldArray = newArray;
, а затем называется adapter.notifyDataSetChanged();
.
Это прекрасно работает, за исключением того, что он не обновляет экран. Мне нужно закрыть, а затем снова открыть экран, чтобы увидеть изменения. Не должно notifyDataSetChanged()
сделать освежение?
редактировать:
После @ ответ MD, это то, что я делаю прямо сейчас:
controller.onRemove(id);
public void onRemove(int id) {
int userListLength = usersArray.length;
int j = 0;
User[] newUserList = new User[userListLength-1];
for(int i=0; i<userListLength; i++)
{
if(id != usersArray[i].getId())
{
newUserList[j] = new User();
newUserList[j] = usersArray[i];
j++;
}
}
usersArray = newUserList;
//store in database
//...
view.getAdapter().refresh(usersArray);
}
public void refresh(User[] items)
{
this.userArray = items;
notifyDataSetChanged();
}
адаптер строительства:
adapter = new myUserAdapter(controller.getBaseContext(), R.layout.user_row, userArrayList);
usersListView.setAdapter(adapter);
и в myUserAdapter
я имеют:
private User[] userArray;
Решение:
@ ответов работы МД. Но я также должен переопределить getCount()
адаптер:
@Override
public int getCount() {
return userArray.length;
}
Это объясняется в принятом ответе here.
Может быть, вам нужно показать ваш адаптер здесь – Xcihnegn
пожалуйста также разместить как построить 'ArrayAdapter' – basin
чек снова' адаптер .remove (Object obj) '. На этот раз вы не получите исключения. 'userArrayList' действительно является экземпляром' ArrayList', правильно? – basin