【问题标题】:Custom ListAdapter Issue自定义 ListAdapter 问题
【发布时间】:2012-02-18 07:53:51
【问题描述】:

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

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>

CallManager.axml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <RelativeLayout
    android:id="@+id/container"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
      android:id="@+id/equipLayout"
      android:tag="equip"
      android:layout_width="fill_parent"
      android:orientation="horizontal"
      android:layout_height="fill_parent"
      android:layout_below="@id/place4"
      android:layout_margin="8dip"
      android:visibility="gone">
     <ListView
      android:id="@+id/equipLV"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"></ListView>
   </LinearLayout>
</RelativeLayout>
</ScrollView>

//还有其他几个嵌套的LinearLayouts,这就是我有ScrollView和RelativeLayouts的原因。不相关,所以为了清洁而忽略了。

CallManagement.cs

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;

}

自定义 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];
    }

}

【问题讨论】:

    标签: android xamarin.android


    【解决方案1】:

    您永远不想将ListView 放在ScrollView 中。这可能就是问题所在。

    【讨论】:

    • 删除 ScrollView 似乎有效,但如果我需要 ScrollView 怎么办?有没有办法让这两个东西一起工作?
    • 不。如果您在另一个滚动容器中有一个滚动容器并且它们都沿相同方向滚动,那么它应该如何知道要滚动什么?你需要两个滚动容器做什么?
    【解决方案2】:

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

    https://github.com/xamarin/monodroid-samples/blob/master/NotePad-Mono.Data.Sqlite/NoteAdapter.cs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多