我有一个Support.V4.App.Fragment
,每次调用OnResume
时都会更新。当前,此更新以拥有AppCompatActivity
的形式进行,使用其SupportFragmentManager
来Remove
现有Fragment
(如果有),Replace
Fragment
的站点ID和新的Fragment
,然后进行Commit
更改:
var fragTrans = this.SupportFragmentManager.BeginTransaction();
// Remove existing Fragment
if (this.pcFrag != null)
{
fragTrans.Remove(this.pcFrag);
}
// Make new Fragment
this.pcFrag = PassageContainerFragment.NewInstance(
this.viewModel.SelectedTranslation,
this.viewModel.RunningApp,
this.viewModel.PassageContainer);
// Replace whatever is at Fragment site ID
fragTrans.Replace(Resource.Id.grpPassageContainer, this.pcFrag);
// Set up some fragment event handlers
this.pcFrag.ClickSelectTranslation += this.OnErrorShowingEvent(this.Frag_ClickSelectTranslation);
...
// Commit changes
fragTrans.Commit();
虽然此方法“有效”,但在UI消隐旧的Fragment
并添加新的Fragment
的地方出现了明显的闪烁。我希望能够在不破坏其View
层次结构的情况下更新现有的Detach
。
注意:我见过一些方法,包括先Attach
加Fragment
再Fragment
,但这似乎对我不起作用-这个{{1} }有一个子Fragment
,导致在子Fragment
的{{1}}之前出现异常:“找不到片段ID 0x1的视图。”
在不干扰其OnCreateView
层次结构的情况下,是否存在适当的方式来更新现有片段(例如,调用其OnResume
)?