You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:06:08