3 回答

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊
由于缺少更好的解決方案,我為我準(zhǔn)備了這個(gè)工作:假設(shè)我有1個(gè)活動(dòng)(MyActivity),并且相互替換的片段很少(一次只能看到一個(gè))。
在MyActivity中,添加以下偵聽器:
getSupportFragmentManager().addOnBackStackChangedListener(getListener());
(如您所見,我正在使用兼容性包)。
getListener實(shí)現(xiàn):
private OnBackStackChangedListener getListener()
{
OnBackStackChangedListener result = new OnBackStackChangedListener()
{
public void onBackStackChanged()
{
FragmentManager manager = getSupportFragmentManager();
if (manager != null)
{
MyFragment currFrag = (MyFragment) manager.findFragmentById(R.id.fragmentItem);
currFrag.onFragmentResume();
}
}
};
return result;
}
MyFragment.onFragmentResume()按下“返回”后將被調(diào)用。一些注意事項(xiàng):
假設(shè)您已將所有交易添加到后臺(tái)(使用 FragmentTransaction.addToBackStack())
每次更改堆棧時(shí)都會(huì)激活它(您可以將其他內(nèi)容存儲(chǔ)在后堆棧中,例如動(dòng)畫),因此您可能會(huì)收到同一片段實(shí)例的多個(gè)調(diào)用。

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個(gè)贊
我對(duì)建議的解決方案做了一些更改。這樣對(duì)我更好地工作:
private OnBackStackChangedListener getListener() {
OnBackStackChangedListener result = new OnBackStackChangedListener() {
public void onBackStackChanged() {
FragmentManager manager = getSupportFragmentManager();
if (manager != null) {
int backStackEntryCount = manager.getBackStackEntryCount();
if (backStackEntryCount == 0) {
finish();
}
Fragment fragment = manager.getFragments()
.get(backStackEntryCount - 1);
fragment.onResume();
}
}
};
return result;
}

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
Android Developers的以下部分介紹了一種通信機(jī)制,該機(jī)制創(chuàng)建活動(dòng)的事件回調(diào)。引用其中的一行:
做到這一點(diǎn)的一種好方法是在片段內(nèi)定義一個(gè)回調(diào)接口,并要求主機(jī)活動(dòng)實(shí)現(xiàn)它。當(dāng)活動(dòng)通過接口收到回調(diào)時(shí),它可以根據(jù)需要與布局中的其他片段共享信息。
編輯: 該片段有一個(gè)onStart(...)當(dāng)用戶可見該片段時(shí)調(diào)用的。同樣,onResume(...)當(dāng)可見且正在運(yùn)行時(shí)。這些與他們的活動(dòng)對(duì)應(yīng)物相關(guān)。簡(jiǎn)而言之:使用onResume()
- 3 回答
- 0 關(guān)注
- 463 瀏覽
添加回答
舉報(bào)