我们是否需要为Xamarin上的每个活动创建不同的适配器?

时间:2017-01-26 04:00:52

标签: c# android json xamarin adapter

我正在开发一个关于Xamarin的Android项目,我已经运行了主页面,我希望ListViewItemOnClick每个菜单。主要活动和单击菜单活动使用条目中的相同数据。问题是我应该为每个活动创建不同的适配器吗?

1 个答案:

答案 0 :(得分:1)

不是一个明确的问题。我仍然想给你一些使用适配器的指南。

基本上,Adapters帮助活动将数据绑定绑定到UI。它们继承自BaseAdaptor类。适配器是每个数据收集的东西,而不是每个活动的东西。一个适配器可以服务于许多活动。例如,如果您有一个适配器来读取名为EmailAdapter的电子邮件,则可以使用它MainActivity.cs以及任何其他活动。

您必须了解从BaseAdapter实现抽象方法,在实现GetView时,您应该提供一个视图,您可以将其定义为可用于在任何活动中启动ListView的布局。

例如:考虑您有2项活动 MainActivity.csMailActivity.cs您需要在来自同一数据源的两个活动中显示电子邮件。因此,创建一个名为EmailItem.xml的布局,它看起来类似于

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    <ImageView
        android:id="@+id/ContactImage"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_margin="5dp" />
    <TextView
        android:id="@+id/ContactName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_marginLeft="5dp" />
</LinearLayout>

创建名为EmailAdapter

的适配器
public class EmailAdapter : BaseAdapter
{
    List<Contact> _contactList;
    Activity _activity;

    public ContactsAdapter (Activity activity)
        {
            _activity = activity;
            FillEmail ();
        }

    void FillEmail ()
    {
        //Logic to fill email
    }

    class Email
    {
        public long Id { get; set; }
        public string DisplayName{ get; set; }
    }
}

当您实施BaseAdapter时,您必须实现GetView,您必须在其中定义视图并将其返回。因此,为您创建的布局指定视图

var view = convertView ?? _activity.LayoutInflater.Inflate (
        Resource.Layout.EmailItem, parent, false);

现在在每个活动的OnCreate()中致电

var emailAdapter = new EmailAdapter (this);
var emailView = FindViewById<ListView> (Resource.Id.EmailView);
emailView.Adapter = contactsAdapter;

此处EmailView可以是每个活动的布局。