Android 自定义ListAdapter问题

Android 自定义ListAdapter问题,android,xamarin.android,Android,Xamarin.android,我尝试使用创建一个自定义ListAdapter,它只需将我的所有记录添加为复选框。尽管在调试期间我可以看到适配器包含所有4条预期记录,override int Count方法返回4,override View GetView迭代4次,但位置变量始终=0,并且实际上只显示包含第一条记录的1个复选框 ListView行布局xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:

我尝试使用创建一个自定义ListAdapter,它只需将我的所有记录添加为复选框。尽管在调试期间我可以看到适配器包含所有4条预期记录,override int Count方法返回4,override View GetView迭代4次,但位置变量始终=0,并且实际上只显示包含第一条记录的1个复选框

ListView行布局xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <CheckBox
    android:id="@+id/checkItem"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>
</LinearLayout>
自定义ListAdapter类

public class CustomListAdapter : BaseAdapter
{
    Activity context;
    External inst;

    public List<equip> equip;

    public CustomListAdapter(Activity context, string callNumber)
        :base()
    {
        inst = new External();
        this.context = context;
        this.equip = new List<equip>();
        this.equip = inst.popEquipLV().ToList();                            
    }

    public override int  Count
    {
        get { return equip.Count; }
    }

    public override Java.Lang.Object  GetItem(int position)
    {
        return position;
    }

    public override long  GetItemId(int position)
    {
        return position;
    }

    public override View  GetView(int position, View convertView, ViewGroup parent)
    {
        var item = equip[position];
        var view = (convertView ?? 
            context.LayoutInflater.Inflate(Resource.Layout.equipLVitem, parent, false)) as LinearLayout;

        CheckBox checkItem = (CheckBox)view.FindViewById(Resource.Id.checkItem);
        checkItem.Tag = GetItemAtPosition(position).unit.ToString();
        checkItem.Text = GetItemAtPosition(position).serial.ToString();

        return view;
    }

    public equip GetItemAtPosition(int position)
    {
        return equip[position];
    }

}
公共类CustomListAdapter:BaseAdapter { 活动语境; 外部仪器; 公共清单设备; 公共CustomListAdapter(活动上下文、字符串callNumber) :base() { inst=新的外部(); this.context=上下文; this.equip=新列表(); this.equipment=inst.popequipmlv().ToList(); } 公共覆盖整数计数 { 获取{return.Count;} } public override Java.Lang.Object GetItem(int位置) { 返回位置; } 公共覆盖长GetItemId(int位置) { 返回位置; } 公共覆盖视图GetView(int位置、视图转换视图、视图组父视图) { var项目=装备[位置]; 变量视图=(convertView?? context.LayoutInflater.Inflate(Resource.Layout.equilvitem,parent,false))作为线性布局; 复选框checkItem=(复选框)view.FindViewById(Resource.Id.checkItem); checkItem.Tag=GetItemAtPosition(position).unit.ToString(); checkItem.Text=GetItemAtPosition(position).serial.ToString(); 返回视图; } 公共设备GetItemAtPosition(内部位置) { 返回装备[位置]; } }
您可能希望使用ArrayAdapter,这样您就没有那么多自定义代码:


您可能希望使用ArrayAdapter,这样您就没有那么多自定义代码:


您永远不希望将
列表视图
放在
滚动视图
中。这可能就是问题所在。

您永远不希望将
列表视图
放在
滚动视图
中。这可能就是问题所在。

删除ScrollView似乎有效,但如果我需要ScrollView怎么办?没有办法让这两件事一起工作吗?没有。如果一个滚动容器在另一个滚动容器中,并且它们都向同一方向滚动,那么它怎么知道滚动什么呢?您需要两个滚动容器做什么?删除ScrollView似乎很有效,但是如果我需要ScrollView怎么办?没有办法让这两件事一起工作吗?没有。如果一个滚动容器在另一个滚动容器中,并且它们都向同一方向滚动,那么它怎么知道滚动什么呢?你需要两个滚动容器做什么?
public class CallManagement : Activity
{      
    CustomListAdapter listAdapter;

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        SetContentView(Resource.Layout.CallManager);

        ListView equipLV = (ListView)FindViewById(Resource.Id.equipLV);
        listAdapter = new CustomListAdapter(this, callNumber.Substring(0,10));
        equipLV.Adapter = listAdapter;

}
public class CustomListAdapter : BaseAdapter
{
    Activity context;
    External inst;

    public List<equip> equip;

    public CustomListAdapter(Activity context, string callNumber)
        :base()
    {
        inst = new External();
        this.context = context;
        this.equip = new List<equip>();
        this.equip = inst.popEquipLV().ToList();                            
    }

    public override int  Count
    {
        get { return equip.Count; }
    }

    public override Java.Lang.Object  GetItem(int position)
    {
        return position;
    }

    public override long  GetItemId(int position)
    {
        return position;
    }

    public override View  GetView(int position, View convertView, ViewGroup parent)
    {
        var item = equip[position];
        var view = (convertView ?? 
            context.LayoutInflater.Inflate(Resource.Layout.equipLVitem, parent, false)) as LinearLayout;

        CheckBox checkItem = (CheckBox)view.FindViewById(Resource.Id.checkItem);
        checkItem.Tag = GetItemAtPosition(position).unit.ToString();
        checkItem.Text = GetItemAtPosition(position).serial.ToString();

        return view;
    }

    public equip GetItemAtPosition(int position)
    {
        return equip[position];
    }

}