我目前正在使用此方法来过滤列表的结果。我有一个显示数据的微调器,我希望使用所选数据过滤列表视图。
String[] finalArray = new String[gameData.size()];
finalArray = gameData.toArray(finalArray);
// finalArray contains the selection for the spinner
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, finalArray);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
selection = (String)spinner.getSelectedItem();
for(String str: oldList) {
if(str.trim().contains(selection))
gameData.add(str);
}
finalArray = new String[gameData.size()];
finalArray = gameData.toArray(finalArray);
arrayAdapter.notifyDataSetChanged();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
我假设listView.setAdapter(arrayAdapter)
一旦做出选择就会更新列表,但它目前没有做任何事情。
String selection = (String)spinner.getSelectedItem();
for(String str: oldList) {
if(str.trim().contains(selection))
gameData.add(str);
}
我所做的是将选择设置为字符串。然后我检查oldList
是否包含字符串选择。然后我通过oldList来匹配selection
,如果它匹配,将它们放入一个新的gameData
列表(被视为过滤结果)。当我将其转换为数组并将其加载到列表视图时(如果匹配)。
答案 0 :(得分:1)
将适配器设置在onItemSelectedListener
之外,并在选择了微调项目时调用notifyDataSetChanged
。
String[] finalArray = new String[gameData.size()];
finalArray = gameData.toArray(finalArray);
// finalArray contains the selection for the spinner
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, finalArray);
// Set the adapter here
listView.setAdapter(arrayAdapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// TODO: Change the elements of finalArray here
arrayAdapter.notifyDataSetChanged();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
检查// TODO:
部分。
您需要在此处更改finalArray
。完成finalArray
中的更改后,即finalArray
中添加了新元素后,您可以调用notifyDataSetChanged
查看列表中的更改。
答案 1 :(得分:0)
我建议您在设置新适配器之前调用listview.setListAdapter(null)或listview.removeAll()。
答案 2 :(得分:0)
我认为这应该适合你:
String[] finalArray = new String[gameData.size()];
finalArray = gameData.toArray(finalArray);
// finalArray contains the selection for the spinner
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, finalArray);
listView.setAdapter(arrayAdapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
selection = (String)spinner.getSelectedItem();
for(String str: oldList) {
if(str.trim().contains(selection))
gameData.add(str);
}
finalArray = new String[gameData.size()];
finalArray = gameData.toArray(finalArray);
arrayAdapter.clear();
arrayAdapter.addAll(finalArray);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
另外,当ArrayAdapter接受List作为数据参数时,为什么要转换为数组?对于列表,此表单中的某些内容也适用于您:
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, gameData);
listView.setAdapter(arrayAdapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
selection = (String)spinner.getSelectedItem();
for(String str: oldList) {
if(str.trim().contains(selection))
arrayAdapter.add(str);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});