我正在开发一个关于Xamarin的Android项目,我已经运行了主页面,我希望ListViewItemOnClick每个菜单。主要活动和单击菜单活动使用条目中的相同数据。问题是我应该为每个活动创建不同的适配器吗?
答案 0 :(得分:1)
不是一个明确的问题。我仍然想给你一些使用适配器的指南。
基本上,Adapters帮助活动将数据绑定绑定到UI。它们继承自BaseAdaptor
类。适配器是每个数据收集的东西,而不是每个活动的东西。一个适配器可以服务于许多活动。例如,如果您有一个适配器来读取名为EmailAdapter
的电子邮件,则可以使用它MainActivity.cs
以及任何其他活动。
您必须了解从BaseAdapter实现抽象方法,在实现GetView
时,您应该提供一个视图,您可以将其定义为可用于在任何活动中启动ListView的布局。
例如:考虑您有2项活动
MainActivity.cs
和MailActivity.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
可以是每个活动的布局。