2014-11-03 60 views
0

我有活動與加載片段的framelayout。 活動有一個列表的邊欄。請幫我片段

  1. 開片段1
  2. 開放fragment2
  3. 開放fragment3

如果我點擊 「打開片段1」 片段1,其中只有列表打開。 如果我點擊「打開fragment2」或「打開fragment3」打開其中的任何信息的fragment2或fragment3。

如果我單擊fragment1,列表中的某個項目會在backstack中打開另一個片段,例如「someFragment」和fragment1。

現在,如果我打開側邊菜單,並嘗試打開或fragment2 fragment3它打開。但是當點擊「後退」,然後一些片段fragment1重疊。

//open fragment1 click 
         Fragment fragment1 = new Fragment1(); 
         fragmentManager.beginTransaction().replace(R.id.content_frame, fragment1).commit(); 

//open fragment2 click 
         Fragment fragment2 = new Fragment2(); 
         fragmentManager.beginTransaction().replace(R.id.content_frame, fragment2).commit(); 
//open fragment3 click 
         EmployeessList fragment3 = new fragment3 (getString(R.string.employee_list_link)); 
         fragmentManager.beginTransaction().replace(R.id.content_frame, fragment3).commit(); 

我需要在新片段的開幕純化堆棧中

在片段1

@Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 

     FragmentTransaction fTrans = getFragmentManager().beginTransaction(); 
     Fragment someFragment= new SomeFragment(); 
     fTrans.replace(R.id.content_frame, someFragment); 
     fTrans.addToBackStack(null); 
     fTrans.commit(); 
    } 

回答

0

commiting一個是從側面菜單中調用交易前 - 添加以下代碼:

if (fragmentManager.getBackStackEntryCount() > 0) { 
    fragmentManager.popBackStack(fragmentManager.getBackStackEntryAt(0).getId(), 
     FragmentManager.POP_BACK_STACK_INCLUSIVE); 
} 

這將清除您當前的後臺堆棧。

+0

@Sergey Balybin,發表您的logcat如此。 – localhost 2014-11-03 08:44:01

0

變化與附加取代:

fTrans.add(R.id.content_frame, someFragment); 
+0

如果我在打開fragment2 fragment1第一次打開之前更改爲「添加」某些內容。即我在片段「someFragment」從backstack點擊「打開fragment2」得到fragment1然後刪除,並在它的位置安裝fragment2 – 2014-11-03 08:54:03

+0

我創建fragment1時添加日誌,他們表明,在調用fragment2 fragment1再次調用 – 2014-11-03 08:55:53