Android 自定义ListAdapter问题
我尝试使用创建一个自定义ListAdapter,它只需将我的所有记录添加为复选框。尽管在调试期间我可以看到适配器包含所有4条预期记录,override int Count方法返回4,override View GetView迭代4次,但位置变量始终=0,并且实际上只显示包含第一条记录的1个复选框 ListView行布局xmlAndroid 自定义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:
<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];
}
}