【问题标题】:Xamarin embedded fragment in fragmentXamarin 在片段中嵌入片段
【发布时间】:2016-09-03 22:12:37
【问题描述】:

我遇到了一堆奇怪的问题,这些片段包含在设计时嵌入在 axml 中的片段。

我的问题是,当我使用 FragmentManager 将片段加载到视图中,然后也使用 FragmentManager 将其删除时,隐式加载的片段是否会自动销毁?如果不是,我应该如何清理父片段,以便嵌入的片段也被删除。另外,当父片段被销毁时,我是否需要调用 View.RemoveAllViews() 来删除片段布局?

【问题讨论】:

    标签: android android-fragments xamarin fragmentmanager


    【解决方案1】:

    这似乎有效。在将片段加载到列表时捕获它们,然后在稍后卸载主片段时将其删除。 ( 必须 Dispose() )

    public partial class MainActivity : Activity
    {
        private LinearLayout LoaderLayout;
    
        private readonly List<Fragment> ActiveFragments = new List<Fragment>();
    
        public override void OnAttachFragment( Fragment fragment ) { ActiveFragments.Add( fragment ); }
    
        private async void ClearLoadFrame()
        {
            if( LoaderLayout == null )
                LoaderLayout = FindViewById<LinearLayout>( Resource.Id.loaderLayout );
    
            var Transaction = FragmentManager.BeginTransaction();
    
            foreach( var Frag in ActiveFragments )
            {
                Transaction.Remove( Frag );
                Frag.Dispose();
            }
    
            Transaction.CommitAllowingStateLoss();
            ActiveFragments.Clear();
    
            var Completed = false;
    
            RunOnUiThread( () =>
            {
                LoaderLayout.RemoveAllViews();
                Completed = true;
            } );
    
            await Task.Run( () =>
            {
                while( !Completed )
                    Thread.Sleep(50);
            });
        }
    

    【讨论】:

    • 未完全修复。现在我有了问题的反面。当我创建一个片段然后销毁它然后尝试重新创建它时,我现在得到嵌入的片段抛出和异常说它无法访问已处理的对象。
    【解决方案2】:

    我发现我正在尝试做的事情是不允许的。

    From this article

    请注意,一个限制是嵌套(或子)片段必须在运行时动态添加到其父片段,并且不能使用标记静态添加。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多