尝试复制没有父视图的视图 - Android

Posted

技术标签:

【中文标题】尝试复制没有父视图的视图 - Android【英文标题】:Trying to duplicate a View without it's parent - Android 【发布时间】:2018-09-05 08:16:03 【问题描述】:

我有一个用于生成新布局的布局列表。

但是问题在于,在将列表布局添加到新布局之前,我需要调用 removeView(),因为列表布局是子布局。调用此方法会从 UI 中移除看起来不太好的视图。

LinearLayout linearLayout = null;

        for(LinearLayout cardView : selectedCardIDList)
            viewHeight += cardView.getHeight();
            if(viewHeight < 842)
                ViewGroup viewGroup = ((ViewGroup)cardView.getParent());
                viewGroup.removeView(cardView);
                linearLayout = cardView;
                pdfViewLayout.addView(linearLayout);
                viewGroup.addView(cardView);
            

pdfViewLayout 是我使用列表中的布局构建的布局。

我试图找到一种方法来复制列表中的布局,这样我认为它不会干扰我的 UI,但是调用 ((ViewGroup)linearLayout.getParent()).removeView(linearLayout); 仍然会从 UI 中删除它,因为它使用的是同一个父级。

有没有办法可以在没有父视图的情况下进行复制? 谢谢

编辑 - 在我最近的尝试中,viewGroup.addView(cardView); 行再次出现“孩子已经有父母”错误

【问题讨论】:

【参考方案1】:

你可以这样做

    创建一个空视图View duplicateview = new View(); 将目标视图复制到您创建的新视图view = "get your target view that you need to duplicate"//your view 因此,您要查找的视图在 duplicateview 中重复。

【讨论】:

我在new View() 这样尝试时得到“无法解析构造函数” 创建视图Button myButton = new Button(this); myButton.setLayoutParams(new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));别忘了设置LayoutParams 还是同样的问题。问题不在于创建副本,问题在于副本仍然具有原始父级。似乎我对副本所做的任何事情都会影响原件。例如,删除副本上的父级也会删除原始上的父项 请检查副本是否仍附加到父视图,并且layparams 已添加到目标视图。然后创建一个新视图,如果它添加的问题是在父级而不是在子级中,则将其添加为子级。 如果您检查我已分配的更新问题,linearLayout = cardView;,则在我从原始文件中删除父项后,复制到原始文件。此时,两个视图都没有父视图。下一行我将副本添加到 pdfView 中,一切正常。之后,我尝试将原件添加到原始父级,但应用程序崩溃,因为原件现在具有分配给副本的视图。

以上是关于尝试复制没有父视图的视图 - Android的主要内容,如果未能解决你的问题,请参考以下文章

android:为啥“layout_weight = 1”使视图在线性布局中对齐父底部? [复制]

嵌套视图不遵守旋转父级的约束(变换)

UI Gesture 没有触发 + 从不是父视图的父视图中删除子视图

WatchOS SwiftUI 动画视图调整父级大小

有没有办法可以将 Text 组件的全部内容包装在 react-native 中的父视图中?

将数据从局部视图传递到父视图