2017-01-26 3 views
0

Im работает над проектом Android на Xamarin, у меня была главная страница, и я хочу ListViewItemOnНажмите каждое меню. Основное действие и активность клик-меню используют те же данные из Entry. Вопрос в том, должен ли я создавать разные адаптеры для каждой характеристики?Нужно ли создавать различные адаптеры для каждой активности на Xamarin?

+2

Не можете понять ваш вопрос, не могли бы вы предоставить немного больше информации, чтобы быть в состоянии помочь вам? – apineda

ответ

1

Непонятный вопрос. Тем не менее я хотел бы дать вам несколько рекомендаций по использованию адаптеров.

В основном, адаптеры помогают осуществлять привязку данных к пользовательскому интерфейсу. Они унаследованы от класса BaseAdaptor. Адаптер - это предмет, не относящийся к каждой вещи. Один адаптер может использовать сервер для многих видов деятельности. Например, если у вас есть адаптер для чтения электронных писем, который называется EmailAdapter, вы можете использовать его: MainActivity.cs, а также любые другие виды деятельности.

Вы должны знать о реализации абстрактных методов из BaseAdapter, когда вы реализуете GetView, вы должны предоставить представление, для которого вы определяете его как макет, который может быть использован для инициирования ListViews в любой деятельности.

Например: У вас есть 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 может быть макетом в деятельность.

+0

Ничего себе, я действительно просветил меня, но я почти там. Итак, скажем, у меня есть 2 действия MainActivity.cs и Next.cs, у меня есть getview для MainActivity.cs внутри адаптера, а также макета MainActivity.axml, я уже создал Next.cs и Next.axml, основываясь на том, что вы предложили мне создать getview для Next.cs внутри адаптера, у меня уже есть то же, что и MainActivity.cs? – Omnislash

+0

'GetView' должен быть реализован для« EmailAdapter », потому что его абстрактный метод« BaseAdapter ». «GetView» - это «за адаптер». Не вещь «для каждой деятельности». –

+0

Хорошо, в моем случае у меня есть это datacollection, могу ли я иметь более одного адаптера (хотя оба они связывают одно и то же datacollection)? потому что, согласно вам, «GetView» предназначен только для одного адаптера, вызывает его «Per Adapter», в то время как я пытаюсь показать разный макет/интерфейс для «MainActivity.cs» и «MailActivity.cs» // И если я могу, возможно ли иметь 2 'baseadaptor' в коде или один из них не может его иметь? – Omnislash

Смежные вопросы