[英]How to get value from StringBuilder and pass it to another activity?
[英]How to pass StringBuilder Array from one Activity to another?
我搜索了很多SO問題,它們已經老了,在docs.oracle.com上找不到更好的解決方案,我不想將每個StringBuilder轉換成字符串來傳遞一個字符串數組,那么如何實現呢?
從源內部活動:
Intent intent = new Intent(this, DestActivity.class);
intent.putCharSequenceArrayListExtra("strings", myStringBuilders);
startActivity(intent);
您可能需要執行類似new ArrayList(Arrays.asList(myStringBuilders));
將其轉換為集合,然后將其傳遞給intent,然后將其轉換回Array。
要傳遞一個StringBuilder數組,你可以使用Intent的putExtra,如下所示:
Intent it = new Intent(this, YourActivity.class);
StringBuilder[] sbAr = new StringBuilder[4];
sbAr[0] = new StringBuilder("Array0");
sbAr[1] = new StringBuilder("Array1");
it.putExtra("sbParam", sbAr);
但是我不知道為什么當你將檢索活動目標中的值時,StringBuilder數組被恢復為CharSequence數組。
CharSequence[] csA = (CharSequence[]) getIntent().getExtras().get("sbParam");
我希望這有幫助
我看到在沒有捆綁的情況下傳遞對象的最好方法是使用EventBus(我推薦greenrobot / EventBus )。
EventBus可以比捆綁快得多。 看到這篇文章 。
我能看到的唯一不利的一面是,如果你的Activity /進程由於內存不足而被破壞,它將在重新創建時丟失數據; 然而,如果您將數據存儲在一個包中,那么該包將在重新創建時重新提供給Activity(這里可能是錯誤的)。
創建一個POJO來存儲事件的StringBuilder
:
public class SaveStringBuilderEvent {
public StringBuilder sb;
public SaveStringBuilderEvent(StringBuilder sb){ this.sb = sb; }
}
創建第一個Activity,並在開始下一個Activity之前發布StickyEvent('StickyEvent'會將最后一個事件保留在內存中,直到手動刪除):
public class Activity1 extends Activity {
private StringBuilder sb;
...
// Function for loading the next activity
private void loadNextActivity(){
EventBus.getDefault().postSticky(new SaveStringBuilderEvent(sb));
Intent intent = new Intent(this, Activity2.class);
startActivity(intent);
}
...
}
創建第二個活動並從EventBus中刪除stick事件:
public class Activity2 extends Activity {
StringBuilder sb = EventBus.getDefault()
.removeStickyEvent(SaveStringBuilderEvent.class)
.sb;
}
我個人認為這是處理這種情況的最合適的方法,你不想捆綁一個對象,但是還有另外兩種不太理想的方法來維護Activity生命周期之間的對象狀態 - 你可以將StringBuilder存儲在Application
類或Singleton對象中; 但是,我不建議這樣做,因為:
postSticky
和removeStickyEvent
命令之間“全局”存儲,因此只要這些活動執行就會收集垃圾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.