如何在 Android Studio 中更改 onOptionsItemSelected 中的 List<String> 值?
How to change List<String> value inside onOptionsItemSelected in Android Studio?
String[] klassen = {"3ECa1", "3ECa2", "3ECb", "3WEa", "3WEb", "3STWa", "3STWb", "3STWc"};
String[] klassen2 = {"4ECa", "4ECb", "4WE", "4STWa", "4STWb", "4STWc", "1Okan", "2Okan"};
String[] klassen3 = {"5EM", "5EW", "5MW", "5WW", "5STWa", "5STWb", "5STWc", "1Okan"};
String[] klassen4 = {"6EM", "6EW", "6MW", "6WW", "6STWa", "6STWb", "6STWc", "2Okan"};
List<String> klassenList = Arrays.asList(klassen);
public boolean onOptionsItemSelected(MenuItem item){
int id = item.getItemId();
switch(id){
case R.id.jaren_3de:
klassenList = Arrays.asList(klassen);
break;
case R.id.jaren_4de:
klassenList = Arrays.asList(klassen2);
break;
case R.id.jaren_5de:
klassenList = Arrays.asList(klassen3);
break;
case R.id.jaren_6de:
klassenList = Arrays.asList(klassen4);
break;
// case R.id.
}
return super.onOptionsItemSelected(item);
}
所以我试图在我的 onOptionsItemSelected 方法中更改 List klassenList 的值。
R.id.jaren_*de
这些是我必须单击才能将屏幕上的按钮更改为所需文本(klassen* 数组)的菜单项。这些按钮都是使用适配器完成的,需要
List<String> klassenList;
但是,这不起作用。它没有给出任何错误(当我没有为 klassenList 赋值时出现空异常错误除外,但我知道为什么会这样)。它只是没有改变按钮的文本,我找不到任何解决方案。
提前致谢!
您是否已通知您的列表视图数据已更改?尝试
listViewAdapater.notifyDataSetChanged();
您向适配器注册了初始 klassenlist
实例,但您当前的代码只是更改了本地 klassenlist
变量的值。适配器仍在引用初始 klassenlist
实例,因此您需要更新 that 实例的数据。
这应该有效:
public boolean onOptionsItemSelected(MenuItem item){
int id = item.getItemId();
switch(id){
case R.id.jaren_3de:
updateKlassenList(klassen);
break;
case R.id.jaren_4de:
updateKlassenList(klassen2);
break;
case R.id.jaren_5de:
updateKlassenList(klassen3);
break;
case R.id.jaren_6de:
updateKlassenList(klassen4);
break;
// case R.id.
}
return super.onOptionsItemSelected(item);
}
private void updateKlassenList(String[] data) {
klassenList.clear();
klassenList.addAll(Arrays.asList(data));
// I assume "adapter" is the adapter of interest.
adapter.notifyDataSetChanged();
}
注意:这段代码不是最优的,因为它每次都会创建一个新的 List
对象(通过 Arrays.asList()
)。但它应该能让您了解如何解决问题。
String[] klassen = {"3ECa1", "3ECa2", "3ECb", "3WEa", "3WEb", "3STWa", "3STWb", "3STWc"};
String[] klassen2 = {"4ECa", "4ECb", "4WE", "4STWa", "4STWb", "4STWc", "1Okan", "2Okan"};
String[] klassen3 = {"5EM", "5EW", "5MW", "5WW", "5STWa", "5STWb", "5STWc", "1Okan"};
String[] klassen4 = {"6EM", "6EW", "6MW", "6WW", "6STWa", "6STWb", "6STWc", "2Okan"};
List<String> klassenList = Arrays.asList(klassen);
public boolean onOptionsItemSelected(MenuItem item){
int id = item.getItemId();
switch(id){
case R.id.jaren_3de:
klassenList = Arrays.asList(klassen);
break;
case R.id.jaren_4de:
klassenList = Arrays.asList(klassen2);
break;
case R.id.jaren_5de:
klassenList = Arrays.asList(klassen3);
break;
case R.id.jaren_6de:
klassenList = Arrays.asList(klassen4);
break;
// case R.id.
}
return super.onOptionsItemSelected(item);
}
所以我试图在我的 onOptionsItemSelected 方法中更改 List klassenList 的值。
R.id.jaren_*de
这些是我必须单击才能将屏幕上的按钮更改为所需文本(klassen* 数组)的菜单项。这些按钮都是使用适配器完成的,需要
List<String> klassenList;
但是,这不起作用。它没有给出任何错误(当我没有为 klassenList 赋值时出现空异常错误除外,但我知道为什么会这样)。它只是没有改变按钮的文本,我找不到任何解决方案。
提前致谢!
您是否已通知您的列表视图数据已更改?尝试
listViewAdapater.notifyDataSetChanged();
您向适配器注册了初始 klassenlist
实例,但您当前的代码只是更改了本地 klassenlist
变量的值。适配器仍在引用初始 klassenlist
实例,因此您需要更新 that 实例的数据。
这应该有效:
public boolean onOptionsItemSelected(MenuItem item){
int id = item.getItemId();
switch(id){
case R.id.jaren_3de:
updateKlassenList(klassen);
break;
case R.id.jaren_4de:
updateKlassenList(klassen2);
break;
case R.id.jaren_5de:
updateKlassenList(klassen3);
break;
case R.id.jaren_6de:
updateKlassenList(klassen4);
break;
// case R.id.
}
return super.onOptionsItemSelected(item);
}
private void updateKlassenList(String[] data) {
klassenList.clear();
klassenList.addAll(Arrays.asList(data));
// I assume "adapter" is the adapter of interest.
adapter.notifyDataSetChanged();
}
注意:这段代码不是最优的,因为它每次都会创建一个新的 List
对象(通过 Arrays.asList()
)。但它应该能让您了解如何解决问题。