Пользовательский выпуск ListAdapter - PullRequest
1 голос
/ 18 февраля 2012

Используя this Я попытался создать собственный ListAdapter, который бы просто добавлял все мои записи в качестве CheckBoxes.Несмотря на то, что во время отладки я вижу, что адаптер содержит все 4 ожидаемые записи, а метод переопределения int Count возвращает 4, а переопределенный вид 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];
    }

}

Ответы [ 2 ]

1 голос
/ 18 февраля 2012

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

0 голосов
/ 18 февраля 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...