创建新视图时动态隐藏视图
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
创建的。那么如何让删除按钮隐藏viewstub
thats 里面呢?
最重要的是,如何让其他方法只影响其内部的视图?
【问题讨论】:
只需使用 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 的动态高度并在底部视图隐藏时将其他视图向上移动?