Xamarin Android:点击LinearLayout内View无需ID即可删除是否可行?
在Xamarin Android中实现点击删除LinearLayout内的TextView(无需ID)
当然可以实现!完全不用给每个TextView设置ID,直接通过LinearLayout就能删掉被点击的那个TextView,我给你分享两种靠谱的实现方式:
方式一:给每个动态TextView绑定点击事件(推荐)
这种方式最直观精准,每个TextView自己负责处理点击删除逻辑,不会误操作:
var layout = FindViewById<LinearLayout>(Resource.Id.layout); Button addTextViewBtn = FindViewById<Button>(Resource.Id.add_btn); // 点击按钮添加TextView addTextViewBtn.Click += (sender, e) => { // 创建新的TextView TextView newTextView = new TextView(this); newTextView.Text = $"我是第 {layout.ChildCount + 1} 个文本"; newTextView.SetPadding(16, 16, 16, 16); newTextView.TextSize = 18f; newTextView.SetBackgroundColor(Android.Graphics.Color.LightGray); // 给这个TextView绑定点击删除事件 newTextView.Click += (tvSender, tvE) => { // 拿到被点击的TextView实例 if (tvSender is TextView clickedTv) { // 从LinearLayout中移除它 layout.RemoveView(clickedTv); } }; // 添加到LinearLayout里 layout.AddView(newTextView); };
核心逻辑说明:
- 每次创建TextView时,直接给它绑定
Click事件,回调里的tvSender就是被点击的TextView本身 - 调用LinearLayout的
RemoveView(View view)方法,传入这个实例就能直接删除,完全不需要依赖ID
方式二:监听LinearLayout的点击事件(批量处理)
如果你想统一通过LinearLayout来处理点击删除,也可以这么做,不过需要判断点击的是不是TextView:
var layout = FindViewById<LinearLayout>(Resource.Id.layout); Button addTextViewBtn = FindViewById<Button>(Resource.Id.add_btn); // 添加TextView的逻辑和上面一致 addTextViewBtn.Click += (sender, e) => { TextView newTextView = new TextView(this); newTextView.Text = $"我是第 {layout.ChildCount + 1} 个文本"; newTextView.SetPadding(16, 16, 16, 16); newTextView.TextSize = 18f; layout.AddView(newTextView); }; // 监听LinearLayout的点击事件 layout.Click += (sender, e) => { var touchEvent = e as Android.Views.View.TouchEventArgs; if (touchEvent?.View is TextView clickedTv) { // 确认点击的是TextView,就删除 layout.RemoveView(clickedTv); } };
注意点:
- 这种方式会监听LinearLayout整个区域的点击,如果点击到LinearLayout的空白处,不会触发删除(因为空白处不是TextView)
- 相比第一种方式,精准度稍差,比如如果LinearLayout里还有其他类型的View,需要额外判断
两种方案都能满足你的需求,个人更推荐第一种,逻辑清晰且不容易出问题。
内容的提问来源于stack exchange,提问作者Andrei Damaschin
相关产品推荐
相关产品推荐

