相关问题:Getting all of the items from an ArrayAdapter
我有一个由// Scoping function to avoid creating globals
(function() {
var target = document.getElementById('target');
var titles = [
'Test 1',
'Test 2',
'Test 3',
'Test 4',
'Test 5'
];
newTitle();
document.getElementById("btn").addEventListener("click", newTitle, false);
function newTitle() {
var i = (Math.random() * titles.length) | 0;
target.innerText = titles[i];
}
})(); // Execute the scoping function
支持的AutoCompleteTextView
。建议列表在运行时更改。为了使更改持久,我需要获取适配器中所有项的列表。做这个的最好方式是什么?我是否需要遍历列表以获取所有元素?
上述问题中的方法1(保留对支持列表的引用)不起作用,因为根据source,在过滤ArrayAdapter
后创建改为原始列表的副本并对其进行操作,ArrayAdapter
项到适配器不再更改后备列表。
使用add
也不适用,因为BaseAdapter
需要AutoCompleteTextView
适配器。
答案 0 :(得分:0)
据我了解您的问题,您的选择是:
扩展基础适配器并提供自己的过滤。这可能是最好的,但需要付出最大的努力。
与适配器列表并行管理列表,向两个列表添加和删除项目。这很容易,但跟踪重复数据对我来说似乎很脏。
清除适配器过滤器,然后获取整个数据集。这也不是很好,但它确实有效。我不知道您的应用的用例,因此我不知道清除过滤器是否有任何副作用。
此示例为适配器设置了几个字符串,当用户按下按钮时,它会清除过滤器,然后获取总项数。此时,您可以遍历检索所有这些项的适配器项。
List<String> stringList = new ArrayList<>();
stringList.add("hello");
stringList.add("hell");
stringList.add("help");
stringList.add("heck");
stringList.add("dude");
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line, stringList);
AutoCompleteTextView ac = (AutoCompleteTextView)findViewById(R.id.auto_complete);
ac.setThreshold(1);
ac.setAdapter(adapter);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Filter f = adapter.getFilter();
f.filter("", new Filter.FilterListener() {
@Override
public void onFilterComplete(int count) {
int count2 = adapter.getCount();
mainText.setText("Count is: " + count);
adapter.add("hellraiser");
}
});
}
});
mainText = (TextView) findViewById(R.id.main_text);