Java 如何更改列表<;字符串>;Android Studio中OnOptions ItemSelected中的值?
我必须单击这些菜单项才能将屏幕上的按钮更改为所需的文本(klassen*数组)。这些按钮都是使用适配器完成的,这需要Java 如何更改列表<;字符串>;Android Studio中OnOptions ItemSelected中的值?,java,android,android-menu,Java,Android,Android Menu,我必须单击这些菜单项才能将屏幕上的按钮更改为所需的文本(klassen*数组)。这些按钮都是使用适配器完成的,这需要 R.id.jaren_*de 列表klassenList; 然而,这是行不通的。它没有给出任何错误(当我没有给klassenList赋值时,除了一个null异常错误,但我知道为什么会发生这种情况)。它只是没有改变按钮的文本,我也找不到任何解决方案 提前谢谢 您是否已通知listview数据已更改?试一试 List<String> klassenList; 您向
R.id.jaren_*de
列表klassenList;
然而,这是行不通的。它没有给出任何错误(当我没有给klassenList赋值时,除了一个null异常错误,但我知道为什么会发生这种情况)。它只是没有改变按钮的文本,我也找不到任何解决方案
提前谢谢 您是否已通知listview数据已更改?试一试
List<String> klassenList;
您向适配器注册了初始
klassenlist
实例,但当前代码只是在更改本地klassenlist
变量的值。适配器仍在引用初始的klassenlist
实例,因此需要更新该实例的数据
这应该起作用:
listViewAdapater.notifyDataSetChanged();
注意:此代码不是最优的,因为它每次都会创建一个新的
列表
对象(通过数组.asList()
)。但它应该能让您了解如何解决问题。您正在重新分配一个变量。您用于按钮的对象不再是klassenList
,您必须重置它们。我如何以正确的方式执行此操作?显然不是,因为变量klassenList
已重新分配。我现在收到“java.lang.UnsupportedOperationException”错误。我查过了,它和版本有关,但我有最新的版本,所以这不会是个问题。没关系,多亏了这个帖子,我找到了答案:我现在用的是LinkedList,而不是普通的列表,而且很有效!
listViewAdapater.notifyDataSetChanged();
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();
}