2017-05-17 31 views
0

我收到了一些片段,並試圖理清它們之間的轉換。我可以從主 - > A - > B - > C。然後,一旦我完成C中的東西,我想回到B→A→主要。這是我想達到的理想轉變。返回轉換中的Android片段

但是,用我現在的代碼,在轉換時會出現一些奇怪的現象。我從Main - > A - > B - > C,然後在C我正在做一些SQL來創建數據庫中的數據,一旦我完成了,我回到B。但是,從那裏,當我按下按鈕時,它會返回到C→B→A→主。在後退過程中有不必要的C

裏面我主要,我打電話一個這樣的:

final SettingActivity settingFragment = new SettingActivity(); 
ft.replace(R.id.frame,settingFragment); 
ft.addToBackStack("tag"); 
ft.commit(); 

裏面我一個,我打電話這樣的:

FragmentTransaction it = getFragmentManager().beginTransaction(); 
it.replace(R.id.frame,categoryFragment); 
it.addToBackStack("tag"); 
it.commit(); 

裏面我B,我打電話給C這樣的:

FragmentTransaction et = getFragmentManager().beginTransaction(); 
et.replace(R.id.frame,editFragment); 
et.addToBackStack("tag"); 
et.commit(); 

然後我Ç,當我成功插入到數據庫中的記錄裏面,我打電話這樣的:

// button on click listener 
new GetAllCategoriesAsyncTask(
      new GetAllCategoriesAsyncTask.OnRoutineFinished() { 
       public void onFinish() { 

        Bundle bundle = new Bundle(); 
        FragmentTransaction it = getFragmentManager().beginTransaction(); 

        bundle.putSerializable("categorylist", GetAllCategoriesAsyncTask.categoryList); 
        categoryFragment.setArguments(bundle); 
        it.replace(R.id.frame,categoryFragment); 
        it.addToBackStack("tag"); 
        it.commit(); 
       } 
      }).execute(); 

然後我內,我在onCreate()中獲取像這樣的數據:

categoryList = (ArrayList<Category>) getArguments().getSerializable("categorylist"); 
+0

爲什麼ü從C替換B片段,它已經在棧,所以當你回來按B變得可見 –

+0

所以我應該使用。新增()方法,或者。更換()?我認爲替換是當你切換意圖,你需要指定什麼地方去 – hyperfkcb

+0

什麼。只是後盾 –

回答

1

On按鈕單擊彈出堆棧中的當前片段,即C,而不是在堆棧中再次添加B。所以,下面的代碼行替換的按鈕的onClick代碼:

getFragmentManager().popBackStack(); 

Bundle當你將數據傳送到下一個屏幕時使用。爲了將數據傳輸到上一個屏幕,您需要使用回調。

僅供參考,請看看下面附鏈接:Communicating with Other Fragments

+0

對不起,但我保留所有代碼同樣的,並添加上面的行按鈕上點擊或? – hyperfkcb

+0

hi @DeniseTan用上面的代碼行代替你的onClick代碼。 –

+0

你的意思是用pop()替換四行?但是當我的按鈕onclick時,我從數據庫中提取數據,並且想將它傳遞迴B.正如我從AsyncTask獲取數據並由Bundle傳回。所以我需要指定它的位置 – hyperfkcb