簡體   English   中英

使用for循環存儲TextView的文本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM