首页 > 解决方案 > 使用 for 循环存储 TextView 的文本

问题描述

我正在尝试将文本存储在许多 TextViews 中以在新的 Activity 中恢复,我想知道如何使用 for 循环而不是一个一个地执行此操作。

@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
    String item1;
    String item2;
    String item3;
    if (listItem1!=null){
        item1 = listItem1.getText().toString();
        outState.putString(TEXT_SAVED, item1);
    }
    if (listItem2!=null){
        item2 = listItem2.getText().toString();
        outState.putString(TEXT_SAVED, item2);
    }
    if (listItem3!=null){
        item3 = listItem3.getText().toString();
        outState.putString(TEXT_SAVED, item3);
    }
    super.onSaveInstanceState(outState);
}

谢谢你帮助我。

标签: javaloopsfor-looptextviewonrestoreinstancestate

解决方案


listItem您可以通过反射获得您的 s 值。在这个给定的示例中,您需要用您的 s 所在Data的类替换。listItem对于此示例,您需要 listItems 的吸气剂,例如

public Data getListItem1() {
    return listItem1;
}

通过以 Method 方法开头的行,您可以从-loopGetter中的当前索引获取动态。for在下一行中,方法(在这种情况下,Getter 被调用并返回此方法调用的值。请注意反射会导致以下异常:IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException |SecurityException。需要处理这些异常以防出现问题。

@Override
protected void onSaveInstanceState(@NonNull Bundle outState) throws Exception {
    for (int i = 1; i <= 3; i++) {
        Method method = this.getClass().getDeclaredMethod("getListItem" + i);
        method.setAccessible(true);
        Data data = (Data) method.invoke(this);
        if(data != null) {
            String value = data.getText().toString();
            outState.putString(TEXT_SAVED, value);
        }
    }
    super.onSaveInstanceState(outState);
}

另一种可能的解决方案是将所有 listItems 存储在 a 中java.util.List并循环它。


推荐阅读