3

在我的片段中有很多微調和編輯文本,提交按鈕是保存數據,重置按鈕是重置所有元素(編輯文本和Spinners)。我用folllowing代碼來重置所有控件重新載入片段,Edittext的文本沒有清除

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.detach(this).attach(this).commit(); 

但它不清楚editext。所有spinners被重置,但editext的文本保持原樣

+0

看看這個https://stackoverflow.com/a/13414452/8164071 –

+0

我不是手動清除文本。我想通過重新加載片段 –

+0

來清除所有控件,最好的方法是手動清除它們。重新加載片段是昂貴的。 –

回答

0

detach()。detach()在支持庫更新25.1.0(可能更早)之後不起作用。

注:該解決方案更新後工作正常

使用runOnUiThread()使用commitNowAllowingStateLoss

getSupportFragmentManager() 
    .beginTransaction() 
    .detach(oldFragment) 
    .commitNowAllowingStateLoss(); 

    getSupportFragmentManager() 
    .beginTransaction() 
    .attach(oldFragment) 
    .commitAllowingStateLoss(); 
+0

嘗試過,但仍然無法正常工作..... –

0

試試這個:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
ft.remove(this).replace(R.id.container, YourFragment.newInstance());; 
ft.commit(); 

性能注意事項:如果僅更換片段以重置值,則最好手動重置值,因爲與手動重置值相比,替換整個片段會帶來很多額外開銷。