gpt4 book ai didi

java - 从 ArrayAdapter 中删除项目

转载 作者:行者123 更新时间:2023-11-30 08:54:41 25 4
gpt4 key购买 nike

我有一个数组:Object[] array ,以及一个扩展 ArrayAdapter<Object> 的数组适配器.当我尝试使用 adapter.remove(Object obj) 从中删除时我得到一个UnsupportedOperationException异常,就像 this post .提供的答案建议改用 ArrayList。这不是我的选择。我需要坚持使用数组。所以我将数组复制到另一个数组,但没有我要删除的项目。然后我就做了:

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;

解决方案:

@MD 的回答有效。但我也不得不覆盖 getCount()在适配器中:

@Override
public int getCount () {
return userArray.length;
}

已在接受的答案中解释 here .

最佳答案

我有办法

在您的适配器中添加刷新方法:

public void refresh(List<String> items)
{
this.items = items;
notifyDataSetChanged();
}

并从Activity调用

yourAdapter.refresh(items); // items new arrayList or Array

关于java - 从 ArrayAdapter 中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29326814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com