java - 使用 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);
}
谢谢你帮助我。
解决方案
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
并循环它。
推荐阅读
- javascript - Swiper滑块全屏不退出Safari
- postgresql - 将数据从 S3 文件复制到 aws postgresql:参数无效?
- c# - 从左到右顺序阅读PDF,而不是基于坐标
- 3dsmax - 在 3dsMax 中根据我们的模型和纹理的尺寸自动计算 UV Tile
- excel - excel vba reading dd/mm/yyyy as mm/dd/yyyy - pivot
- firebase - 如何让特定的 API 在 Firestore 上运行写/读请求?
- python - 在 InfluxDB 中插入高频数据的最佳方法
- swift - 如何在不导致内存崩溃的情况下制作视频的 collectionView
- c - 即使在某个循环之后,递归如何保留价值
- python - Pygame多个子弹不产生