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

Xamarin Android中如何消除Adapter指定位置的空视图

解决Xamarin Android Adapter中空视图问题

你的问题核心是只设置了目标控件的可见性,未对不需要的控件设置隐藏,再加上Adapter的视图复用机制,导致旧视图状态残留,出现空占位。按以下方式修改代码即可解决:

  1. 初始化控件后先统一设置所有控件为隐藏状态,避免复用残留
  2. 根据id判断显示哪一组控件,同时绑定对应数据
  3. 修正ViewHolder实例化的笔误(原代码里new Myadapter()应该是自定义的ViewHolder类)

修改后的完整代码:

view = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.Myadapter, parent, false);

var desc = view.FindViewById<TextView>(Resource.Id.OrderedDesc);
var OrderedQty = view.FindViewById<TextView>(Resource.Id.OrderedQty);

var x = view.FindViewById<TextView>(Resource.Id.x);
var newOrderedDesc = view.FindViewById<TextView>(Resource.Id.newOrderedDesc);
var newQty = view.FindViewById<TextView>(Resource.Id.newitemQty);

// 先默认隐藏所有控件,消除复用残留
desc.Visibility = ViewStates.Gone;
OrderedQty.Visibility = ViewStates.Gone;
x.Visibility = ViewStates.Gone;
newOrderedDesc.Visibility = ViewStates.Gone;
newQty.Visibility = ViewStates.Gone;

var itemId = MyConvert.ToInt32(Getitem[position].id);
if (itemId == 19)
{
    // 显示新控件组并绑定数据
    x.Visibility = ViewStates.Visible;
    newOrderedDesc.Visibility = ViewStates.Visible;
    newQty.Visibility = ViewStates.Visible;
    
    newOrderedDesc.Text = Getitem[position].Description.Trim();
    newQty.Text = MyConvert.ToString(Getitem[position].Quantity).Trim();
}
else
{
    // 显示旧控件组并绑定数据
    desc.Visibility = ViewStates.Visible;
    OrderedQty.Visibility = ViewStates.Visible;
    
    desc.Text = Getitem[position].Description.Trim();
    OrderedQty.Text = MyConvert.ToString(Getitem[position].Quantity).Trim();
}

// 替换为你的实际ViewHolder类,原代码里的Myadapter是笔误
view.Tag = new MyViewHolder()
{
    desc = desc,
    OrderedQty = OrderedQty,
    newOrderedDesc = newOrderedDesc,
    newQty = newQty
};

注:使用ViewStates.Gone而非Invisible,因为前者会完全移除控件的布局占位,彻底避免空视图问题。

内容的提问来源于stack exchange,提问作者Christopher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 00:08:19