使用for循环来存储TextView的文本



我正试图将文本存储在许多TextView中,以便在新的"活动"中恢复,我想知道如何使用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);
}

谢谢你帮我。

您可以通过反射获得listItem的值。在这个给定的示例中,您需要将Data替换为listItem所属的类。在这个例子中,您需要listItems的getter,例如

public Data getListItem1() {
return listItem1;
}

通过以Method方法开头的行,您将从for-循环中的当前索引中获得Getter动态。在下一行中,方法(在本例中,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存储在java.util.List中并在其上循环

最新更新