2012-02-17 97 views
1

使用this我试图创建一个自定义ListAdapter,只需将所有记录添加为CheckBoxes即可。尽管我可以在调试过程中看到适配器包含所有4条预期记录,并且override int Count方法返回4,并且覆盖View GetView迭代4次,但位置变量always = 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这就是为什么我有滚动型和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]; 
    } 

} 

回答

1

你永远不想把一个ListView里面的一个ScrollView。这可能是问题所在。

+0

删除ScrollView似乎已经奏效,但如果我需要ScrollView呢?没有办法让这两件事情一起工作吗? – jmease 2012-02-20 14:06:07

+0

没有。如果你有一个滚动容器在另一个滚动容器内并且它们都朝相同方向滚动,它应该如何知道如何滚动?你需要两个滚动容器来做什么? – 2012-02-20 19:12:39