gpt4 book ai didi

java - 当 EditText 更改时如何从 ArrayAdapter 中删除项目?

转载 作者:行者123 更新时间:2023-12-02 05:07:12 24 4
gpt4 key购买 nike

我正在尝试实现一种在将文本添加到 EditText 时从 ListView 中删除项目的方法,有点像自动完成。

我创建了以下 ArrayAdapter 来进行简单测试:

mListViewItem; // My ListView
mEditTextItem; // My EditText

String[] arr = new String[]{"One", "Two", "Three", "Four", "Five"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.list_item_medication, arr);
mListViewItem.setAdapter(adapter);

现在,我添加了一个事件处理程序来处理文本更改。现在,我想做的就是删除不包含 EditText 输入的项目。在此示例中,如果我键入“O”,则应删除项目“三”和“五”。我已经尝试过:

mEditTextItem.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
for(int i = 0; i < adapter.getCount(); i++){
if(!adapter.getItem(i).contains(s)){
adapter.remove(adapter.getItem(i));
}
}
}

@Override
public void afterTextChanged(Editable s) {

}
});

但我不知道如何编写“删除”函数来删除必要的项目,因为这会给我一个 UnsupportedOperationException

最佳答案

But I don't know how to code the 'remove' function to remove necessary items, as this gives me an UnsupportedOperationException

如果您将数组作为 ArrayAdapter 的数据传递,该数组将转换为不可更改的列表(这意味着您无法通过添加或删除项目来更改列表的大小) )。这就是适配器在使用 remove() 时尝试执行的操作,并且显然会因该异常而失败。

最简单的解决方案是使用普通列表(如ArrayList)来存储数据而不是数组:

String[] arr = new String[]{"One", "Two", "Three", "Four", "Five"};
List<String> data = new ArrayList<String>();
for (String item : arr) {
data.add(item);
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.list_item_medication, data);
mListViewItem.setAdapter(adapter);

关于java - 当 EditText 更改时如何从 ArrayAdapter 中删除项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27679846/

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