2016-03-01 51 views
1

我使用與viewpager tabactivity一個活動和連接fragmentA.when我想移動fragmentB,取代fragmentB與目前fragmentA.I需要找到onbackpress解決方案在FragmentB中刷新fragmentA不會改變Backstack,因爲我在一個選項卡中使用了近十個片段。如何刷新背部按以前的片段,而不會干擾後面堆

是否有片段生命週期的任何方法

+0

能詳細闡述,因爲這個問題我也不清楚。 – himanshu1496

+0

在我的應用程序使用一個活動增加了一個片段包含三個選項卡,在第一個選項卡更換近5個片段,當我在第5段,我想刷新第四片段不改變後退堆棧,因爲當我們回到按下4片段它shouls重定向到在我上面的問題第三片段 我提到父母的活動,但它是一個活動,然後我加了一個片段,有三個選項卡 – user5466222

+0

我需要處理onbackpress在片段 – user5466222

回答

0

覆蓋onBackPressed()方法Activity,在堆棧中添加所有fragment

@Override 
public void onBackPressed() { 

FragmentManager manager =getFragmentManager(); 
int count = manager.getBackStackEntryCount(); 

if (count == 0) { 
    super.onBackPressed(); 
    } else { 
    manager.popBackStack(); 
    } 

} 
+0

@Emzoz可以給你提示如何在onBackPressed()的後臺添加片段 – Teekam

0

查看傳呼機並不總是抱着它在記憶的碎片,所以你必須處理2種情景: 1 - 片段重建 - 剛讀無論你持有他們,並表明在普通方式的數據。 2 - 片段從外部被修改,但仍被ViewPager保留,據我所知這是你所關心的。 你可以做的是創建這個listener然後通知片段它再次顯示並可能應該重新加載它的數據。針對不同的應用程序組件之間的通信

更復雜的答案是使用一些事件總線像Otto

0

當片段B,歷時片段A,片段A是的onPause()。在後壓後,片段A是onResume()。所以你可以創建一個布爾值來觀察這個變化。

在片段A

private boolean isBackFromB; 

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    isBackFromB=false; 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    isBackFromB = true; 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    updateUI(); 
    if (isBackFromB) //Do something 
}