2017-05-08 118 views
0

我在Android中使用BottomNavigationView來製作一個像Instagram一樣的應用程序。我正在使用navigationTabs的片段。應用程序有5個標籤初始化我已將中間選項卡設置爲活動選項卡,並在應用程序啓動後加載它。當我點擊任何其他標籤網絡調用和數據加載。現在,當我按下後退按鈕或再次單擊最後一個選項卡(啓動時加載該選項卡)時,將重新創建片段,並調用網絡加載相同的數據。我想用相同的數據顯示以前的片段而不重新創建。防止每次點擊bottomnavigation選項卡時重新創建片段

我使用

transaction.add(container,fragment);

但無濟於事嘗試。

我對製表符碼點擊

if (item.getItemId() == R.id.nav_OverView && _current != R.id.nav_OverView) { 
     Overview _overView = new Overview(); 
    _fragmentTransaction.hide(_currentFragment); 
    _fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE); 
    _fragmentTransaction.add(R.id.content_base_drawer, _overView); 
    _fragmentTransaction.commit(); 
    _current = R.id.nav_OverView; 
     viewIsAtHome = true; 
    } 

我知道使用刪除和添加是一樣的使用代替。

任何幫助表示讚賞。

+0

看到這個[鏈接](http://stackoverflow.com/questions/14354885/android-fragments-backstack)。或者,如果這不會爲你工作,使用單例類來保存第一次加載數據,並在它後面使用它。 – ADM

+0

發佈您的'setOnNavigationItemSelectedListener'代碼,您可能正在創建您的片段 – marmor

+0

@marmor更新...現在檢查 – Joe

回答

0

_overview成類字段(而不是局部變量),並改變你的聽衆代碼如下:

此外,使用replace代替hide + add,這將防止Fragment already added錯誤。

替換已添加到容器的現有片段。這是 基本相同,調用刪除(片段)所有當前 添加片段添加相同containerViewId是然後 加(INT,片段,字符串)這裏給出了相同的論點。

見例如:

if (item.getItemId() == R.id.nav_OverView && _current != R.id.nav_OverView) { 
     if (_overView == null) { 
      _overView = new Overview(); 
     } 
    _fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE); 
    _fragmentTransaction.replace(R.id.content_base_drawer, _overView); 
    _fragmentTransaction.commit(); 
    _current = R.id.nav_OverView; 
    viewIsAtHome = true; 
} 
+0

片段已添加:fragmentName ..嘗試返回到前一個片段時出現此錯誤。雖然指出了課堂領域的好處,但我完全忽略了這一點。 – Joe

+0

是的,而不是重新添加片段,你應該刪除一個隱藏它 – marmor

+0

究竟如何?請進行編輯。感謝你的幫助。如何檢查片段是否已經加載或第一次運行?如果它已經加載調用隱藏在最後一個片段將彈出第二個最後一個片段,我認爲,而不是所需要的,如果我打開1 2 3 4 5,然後通過調用5隱藏打開2,它會隱藏所有5 4 3或只是最後一個? – Joe

0

之前創建視圖,你可以檢查的觀點是不與否,下面的代碼片段幫助重建問題。

View view; 

@Override 

public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
{ 

if (view == null) 

{ 

     view = inflater.inflate(R.layout.frag_layout, container, false); 
     init(view); 
    } 

    return view; 
} 
相關問題