Пользовательская проблема ListAdapter

Используя это, я попытался создать собственный ListAdapter это просто добавит все мои записи в виде флажков. Несмотря на то, что во время отладки я вижу, что адаптер содержит все 4 ожидаемых записи, а метод переопределения int Count возвращает 4, а переопределение View GetView повторяется 4 раза, переменная position всегда = 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];
    }

}

person jmease    schedule 17.02.2012    source источник


Ответы (2)


Вы никогда не захотите ставить ListView внутри ScrollView. Это, вероятно, проблема.

person Christopher Perry    schedule 17.02.2012
comment
Удаление ScrollView, кажется, сработало, но что, если мне нужен ScrollView? Нет ли способа заставить эти две вещи работать вместе? - person jmease; 20.02.2012
comment
Неа. Как он должен знать, что прокручивать, если у вас есть один контейнер прокрутки внутри другого, и они оба прокручиваются в одном направлении? Для чего нужны два контейнера для прокрутки? - person Christopher Perry; 20.02.2012

Возможно, вы захотите использовать ArrayAdapter, чтобы у вас не было столько пользовательского кода:

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

person jpobst    schedule 17.02.2012