在微调器上选择项目时更新列表视图
Updating listview when item selected on a spinner
我目前正在使用这种方法来过滤列表的结果。我有一个显示数据的微调器,我希望使用所选数据过滤列表视图。
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
(被视为过滤结果)。那是我将它转换成一个数组并在匹配时将其加载到列表视图的时候。
在 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
来查看列表中的更改。
我建议您在设置新适配器之前调用 listview.setListAdapter(null) 或 listview.removeAll()。
我认为这对你有用:
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) {
}
});
我目前正在使用这种方法来过滤列表的结果。我有一个显示数据的微调器,我希望使用所选数据过滤列表视图。
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
(被视为过滤结果)。那是我将它转换成一个数组并在匹配时将其加载到列表视图的时候。
在 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
来查看列表中的更改。
我建议您在设置新适配器之前调用 listview.setListAdapter(null) 或 listview.removeAll()。
我认为这对你有用:
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) {
}
});