[英]Using for loop to store text of 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
的值。 在這個給定的示例中,您需要將Data
替換為您的listItem
來自的 class 。 對於此示例,您需要 listItems 的吸氣劑,例如
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
中並循環它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.