创建新视图时动态隐藏视图

Posted

技术标签:

【中文标题】创建新视图时动态隐藏视图【英文标题】:Dynamically hide a viewstub when a new one is created 【发布时间】:2013-05-21 21:14:38 【问题描述】:

我制作了一个viewstub,它被膨胀并再次创建了很多次。它使用的布局包括一个“删除”按钮,用于隐藏视图块(或将其缩小)。

当我创建一个新的viewstub 时,我调用这个代码:

ViewStub eventStub = new ViewStub(this);
            eventStub.setLayoutResource(R.layout.event_container);
            eventContainerMain.addView(eventStub);
            eventStub.inflate();

问题是,在viewstub 布局中,删除按钮是使用新的viewstub 创建的。那么如何让删除按钮隐藏viewstubthats 里面呢?

最重要的是,如何让其他方法只影响其内部的视图

【问题讨论】:

只需使用 setVisibility(View.GONE) 删除视图 谢谢,但我如何让它以它所在的视图为目标? 【参考方案1】:

你没有正确使用视图存根......

首先,使用以下命令将您的视图指向您想要复制的视图的布局:

ViewStub stub = new ViewStub(this);
    stub.setLayoutResource(R.layout.viewStubLayout);
    stub.inflate();

接下来,进入您的 XML 并确保布局上的按钮使用正确的方法(在您的类中声明)具有 android:onClick 选项。

对于删除视图存根,您实际上并没有删除它们...您应该使用.setVisibility(GONE).setVisibility(VISIBLE) 来管理用户是否可以看到它。这将用于onClick 指向的方法。此外,在引用对象所在的视图存根时使用“this”将允许您管理用户单击的指定视图中发生的情况。

【讨论】:

【参考方案2】:

您不会以希望删除的方式删除视图存根。膨胀时,ViewStub 会从父对象中消失,并被 View 对象替换。如果要在创建的视图上使用方法,可以使用ViewStub xml 文件中的 android:inflatedId 属性。

您说您正在使用的布局有一个“删除”按钮,可以“缩小”ViewStub,但实际上发生的情况是您正在删除在膨胀ViewStub 时创建的视图。一旦 ViewStub 膨胀,它会自动从父级中删除,因此膨胀后不会有 Viewstub 存在可删除。

听起来你想要的是动态删除由膨胀的 ViewStub 创建的View。为此,我建议查看Add and Remove Views in Android Dynamically?

【讨论】:

以上是关于创建新视图时动态隐藏视图的主要内容,如果未能解决你的问题,请参考以下文章

使用 NavigationLink 打开新视图时如何隐藏 TabView?

如何在自动布局中使用 UITableViewCell 的动态高度并在底部视图隐藏时将其他视图向上移动?

新添加的表格视图单元格在反弹时隐藏

当我向下滚动表格视图时,隐藏单元格的复选标记消失了

在滚动视图中动态隐藏状态栏时滞后/屏幕冻结(Swift 3)

自动布局:如何隐藏包含子视图的 UIView?