2017-02-14 42 views
1

我一直在研究解決我的問題,但沒有一個單一的結果解決了我的問題。交換活動

我有五個Java活動。每個活動都有五個按鈕,其中四個用於其他活動,一個用於自身。它基本上只是頁面底部的底部。

我的問題是,比方說,我在一個活動,然後我點擊該按鈕活動再次,它會打開並加載了全新的活動。然後當我點擊後,它會顯示上一個活動,因爲我離開了它。但如果我按十次,我需要點擊十次。另外,如果我在每次活動之間切換兩次,並且想要單擊回到主體以退出,則需要點擊十次而不是五次。

我希望它是這樣的,當我點擊一個按鈕,它會打開活動。如果我再次按下按鈕,如果我正在進行該活動,它將不會執行任何操作。如果我在活動之間切換,並且我壓制了已經打開的活動,我希望將其從較低的位置移到堆疊頂部,而不是添加。所以最多隻有5個活動在運行。 這是一個非常令人困惑的問題,因爲我看到有人建議使用意向標誌,我不確定是否將它們放置在清單中,這與我嘗試的無關。我看到有人建議使用LaunchMode單一實例,它也沒有做任何事情。

+0

'...一到那麼什麼是在具有打開按鈕感itself' ...的非常相同的活動你已經在?! –

+0

@Rotwang這是一個不斷的UI。認爲instagram。我可以非常輕鬆地在頁面上禁用按鈕,但仍然無法解決問題。如果我打開另一個頁面,然後再次打開該頁面,就像說我只是通過導航按鈕在頁面之間切換,然後我執行100次,然後我需要點擊100次。我想要的東西,我只需要在任何給定的時間最多5次。 –

+0

@Rotwang,我仍然想保留該按鈕以備將來使用,所以我可以重新調整它的用途以便在打開時更新該活動。 –

回答

2

我真的認爲片段是最好的方法。是的,這有點棘手,但你可以在片段中使用片段。對於沒有建立額外的情況下航行,我想你可能會尋找沿此線的東西:

public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    if(id == R.id.nav_home){ 

     Fragment newFragment; 
     FragmentManager fragmentManager = getSupportFragmentManager(); 

     // Look for fragment by tag 
     Fragment foundFragment = fragmentManager.findFragmentByTag(MAIN_FRAGMENT); 

     if(foundFragment != null) { //if fragment's already in the backstack 
      newFragment = foundFragment; //replace fragment with backstack fragment 
     }else{ 
      newFragment = new MainFragment(); // use a new fragment instance 
     } 

     // Add new fragment instance to fragment manager 
     fragmentManager.beginTransaction() 
       .replace(R.id.fragment_container, newFragment, MAIN_FRAGMENT) 
       .addToBackStack(MAIN_FRAGMENT) 
       .commit(); 

    } 
    // ... 
} 
+0

我真的開始考慮片段。你知道從活動變成碎片有多困難嗎?我是否更改清單中的所有代碼?我會做一些挖掘,但我認爲如果我使用碎片,我可能不得不從頭開始。他們如何工作?那麼主要活動的內容也會是片段嗎?或者,除了我製作的工具欄和底欄之外,我還應該在主要活動中沒有任何內容? –

+2

清單不關心碎片,因此您可以將清單中的活動聲明註釋爲要更改爲碎片的清單中的活動聲明。主要活動將包含導航/菜單和「FrameLayout」/碎片容器。爲了將你的'Activities'改爲'Fragments',生命週期方法有一些不同之處,但大多數情況下有很多相似之處,所以你通常可以拷貝你的代碼並做一些調整來使用'Fragment'版本的方法你有在你的活動或'getActivity()。whateverYouWantToUse()使用活動的版本。 –