2014-10-30 118 views
0

我有4個選項卡,其中包含一個片段。當我從片段2切換到任何其他片段時,我希望保持片段狀態(它具有用於將項目上載到服務器的輸入字段)。切換片段時保持輸入片段

我已經嘗試過使用addToBackStack但它會結束與所有片段有它能夠保持我的片段2的狀態。

這就是我想要的:在上傳

Fragment 1 = home 
Fragment 2 = upload 
Fragment 3 = edit 
Fragment 4 = support 

2 -> 1 = keep 2's state 
2 -> 3 = keep 2's state 
1 -> 2 = resume 2's state 
3 -> 2 = resume 2's state 
1 -> 3 = keep 2's state 
3 -> 1 = keep 2's state 
etc.. 

我有超過30 inputfields,我不想存儲在SQLite的所有信息,每次任何的EditText文本更改。

如果我使用addToBackStack,那麼我可以從家中支持編輯等等。我不想那樣!喊叫!

+0

嘗試閱讀有關'FragmentStatePagerAdapter'以及如何保存和恢復狀態的信息。 – Panther 2014-10-30 10:55:31

+0

'當我從片段2切換*定義*開關* ...如果你只是隱藏/顯示狀態應該保持...添加/刪除將重新創建片段... – Selvin 2014-10-30 10:58:07

+0

我使用'transaction'與'replace'和'commit'。我用[this](http://stackoverflow.com/a/26651072/3064486)回答。 – 2014-10-30 11:14:53

回答

1

也許並不適合您的需求,但如果你能,實例片段只有一次:

private MyFragment mMyFragment; 
private MyOtherFragment mMyOtherFragment; 

將它們初始化並重新使用它們而沒有即時再次使用它們

+0

這工作。在我的活動中,我使用Fragment f = new Fragment();然後在我的開關中,我用f作爲目標而不是新的Fragment(); – 2014-10-30 11:10:14

+0

正是我的意思:) – 2014-10-30 12:06:42

-1

加入backStack不存儲信息。因爲你必須使用RetainInstanceState。如圖所示

覆蓋的方法來setRetainInstance:

@Override 
public void setRetainInstance(boolean retain) { 
    super.setRetainInstance(true); 
} 

然後在片段onAttach方法,把這個:

getRetainInstance(); 
+0

'覆蓋一個方法setRetainInstance'爲了什麼? – Selvin 2014-10-30 11:01:37