Xamarin / C#从自定义列表视图

时间:2017-07-27 10:50:59

标签: c# listview xamarin radio-button baseadapter

我使用Xamarin创建我的应用程序。我有一个自定义ListView atm。与Radiobuttons在其中。这些Radiobuttons是可点击的,但它们中的每一个都是(多个)。

我想要的结果应该如下所示:当时只能检查1。有一些Java解决方案,但它们根本不帮助我。提前谢谢。

这就是我创建Listview的方式

        mListView = FindViewById<Android.Widget.ListView> (Resource.Id.listView1);

        mItems = new List<Artikel>();
        mItems.Add(new Artikel() { Name = "X", Amount = 50 });
        mItems.Add(new Artikel() { Name = "Y", Amount = 300 });
        mItems.Add(new Artikel() { Name = "Z", Amount = 80 });
        mItems.Add(new Artikel() { Name = "A", Amount = 174 });

        MyListViewAdapter adapter = new MyListViewAdapter(this, mItems);
        mListView.Adapter = adapter;

Artikel.cs

    class Artikel
    {
     public string Name { get; set; }
     public int Amount { get; set; }
    }

MyListViewAdapter.cs

    private List<Artikel> mItems;
    private Context mContext;


    public MyListViewAdapter(Context context, List<Artikel> items)
    {
        mItems = items;
        mContext = context;
    }

    public override int Count
    {
        get { return mItems.Count; }
    }

    public override long GetItemId(int position)
    {
        return position;
    }

    public override Artikel this[int position]
    {
        get { return mItems[position]; }
    }

    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        View row = convertView;
        if (row == null)
        {
            row = LayoutInflater.From(mContext).Inflate(Resource.Layout.listview_row, null, false);
        }
        TextView txtName = row.FindViewById<TextView>(Resource.Id.Name);
        txtName.Text = mItems[position].Name;

        TextView txtamount = row.FindViewById<TextView>(Resource.Id.Amount);
        txtamount.Text = mItems[position].Amount.ToString();


        return row;  
    }

提前致谢!

1 个答案:

答案 0 :(得分:0)

正如我在评论中所说,当你希望你的RadioButtons是独占的(只有一个被上下文选中)时,你可以将它们包装在RadioGroup中。

想象一下,这是ListView项目的自定义布局。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView android:id="@+id/tvName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView android:id="@+id/tvAmount"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />    

    <RadioGroup android:layout_height="wrap_content" android:layout_width="match_parent">
        <RadioButton 
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:id="@+id/rb1"
            android:text="Option 1" />
        <RadioButton 
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:id="@+id/rb2"
            android:text="Option 2" />
        <RadioButton 
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:id="@+id/rb3"
            android:text="Option 3" />
        <RadioButton 
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:id="@+id/rb4"
            android:text="Option 4" />
    </RadioGroup>    
</LinearLayout>

添加RadioGroup用户只能从每个ListView项目中选择一个RadioButton

希望这会有所帮助.-