Java 如何更改列表<;字符串>;Android Studio中OnOptions ItemSelected中的值?

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; 您向

我必须单击这些菜单项才能将屏幕上的按钮更改为所需的文本(klassen*数组)。这些按钮都是使用适配器完成的,这需要

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();
}