在触摸时删除 LinearLayout 项目

Posted

技术标签:

【中文标题】在触摸时删除 LinearLayout 项目【英文标题】:Remove LinearLayout item on touch 【发布时间】:2018-06-22 16:47:11 【问题描述】:

可以在 Xamarin android 的 LinearLayout onClick 中删除特殊视图吗? 例如,我在 LinearLyout 中介绍了一些 TextView,我触摸了一个删除。我可以在没有 TextView 的 Id 的情况下执行此操作,我可以通过 LinearLayout 删除吗?逻辑方案:

var layout = FindViewById<LinearLayout>(Resource.Id.layout);
TextView text;
layout.Click += (sender, e) => text = new TextView(this); text.Text="Text";    
layout.AddView(text) ;


// And here I don't know how to make, something like this

layout.Click /*Click on text*/ += (sender,e) =  layout.Remove(/*OnTouched 
TextView in LinearLayout*/);

可以吗?

【问题讨论】:

【参考方案1】:

您可以使用view.SetVisibility(ViewStates.Gone) 将视图从其父级层次结构中删除,尝试在Click 处理程序中执行此操作

评论后编辑:

那么您应该在每个视图上添加 Click 方法,而不是将其添加到布局中:

text.Click /*Click on text*/ += (sender,e) =>
    sender.SetVisibility(ViewStates.Gone);

【讨论】:

是的,你说得对,但我忘了说我总是有新的实例,我必须通过 arg 获取这个 TextView。我修复代码。 `` 那么您应该在每个视图上添加 Click 方法,而不是将其添加到布局中:text.Click /*Click on text*/ += (sender,e) =&gt; sender.SetVisibility(ViewStates.Gone); 是的@AdricoM。我现在修复了代码。请问现在可以看了吗?我想使用像 ListView 这样的布局。像这样的东西。 那你应该试试:var layout = FindViewById&lt;LinearLayout&gt;(Resource.Id.layout); TextView text; layout.Click += (sender, e) =&gt; text = new TextView(this); text.Text="Text"; text.Click += (sender,e) =&gt; sender.SetVisibility(ViewStates.Gone); layout.AddView(text) ; 有些想错了。我无法正确使用 args 。工作只是这样,但只在最后一个实例中被删除。 var layout = FindViewById&lt;LinearLayout&gt;(Resource.Id.layout); TextView text; layout.Click += (sender, e) =&gt; text = new TextView(this); text.Text="Text"; text.Click += (sender,e) =&gt; text.Visibility = ViewStates.Gone; layout.AddView(text) ; Args 绝对不行。

以上是关于在触摸时删除 LinearLayout 项目的主要内容,如果未能解决你的问题,请参考以下文章

android - 过度绘制布局允许通过 LinearLayout 进行触摸

将触摸事件传递给父视图

如何删除GridView内LinearLayout中的空白?

从Android中的LinearLayout中删除视图时出现异常

触摸时如何删除克隆

触摸 infoWindow 适配器时删除突出显示