如何在 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())。但它应该能让您了解如何解决问题。