Я хотел бы создать ListView с переменным цветом фона для каждой строки.Android MVVM Cross v3 - Как создать ListView с чередующимися цветами строк
Я новичок в разработке Android в целом, не говоря уже о Xamarin и MVVMCross а :)
Есть некоторые примеры делать это в Android и миром Xamarin, но я не могу понять как установить это в перекрестке MVVM.
Мое понимание заключается в том, что мне нужно будет реализовать это в конкретном коде просмотра Android, и для этого мне нужно будет установить какой-либо адаптер в ListView, который может программно установить цвет фона для каждого элемента «Список» по мере их рендеринга.
Я нашел этот пример:
Однако после внедрения я считаю, что ни один из следующих методов не вызывается на моем CustomAdapter : MvxAdapter
при отображении вида:
GetBindableView, GetSimpleView, GetBindableView, GetView
I также нашел этот неотвеченный вопрос
Issue with custom listview using mono droid and mvvmcross
который использует MvxBindableListAdapter
, который, кажется, больше не существует.
Может ли кто-нибудь указать мне правильное направление?
Вот различные фрагменты кода, связанные:
TradeBookingResponseView.axml владеет этим:
<Mvx.MvxListView
android:id="@+id/TradeConfirmation"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
local:MvxBind="ItemsSource OpenTradeListItems"
local:MvxItemTemplate="@layout/item_confirmation"
/>
внутри его LinearLayout
item_confirmation.axml это:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/tradingStateIcon"
xmlns:local="http://schemas.android.com/apk/res-auto">
<TextView
android:layout_weight="0.35"
android:text="Field"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:id="@+id/tradeConfirmationField"
local:MvxBind="Text Field" />
<TextView
android:layout_weight="0.65"
android:text="Value"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:id="@+id/tradeConfirmationValue"
local:MvxBind="Text Value"/>
</LinearLayout>
TradeBookingResponseViewModel предоставляет th является
public ObservableCollection<ConfirmationItem> OpenTradeListItems
{
get
{
return openTradeListItems;
}
set
{
if (!Equals(value, openTradeListItems))
{
openTradeListItems = value;
RaisePropertyChanged(() => OpenTradeListItems);
}
}
}
Хотя вид кода
public class TradeBookingResponseView : ViewBase
{
public TradeBookingResponseView() : base(Resource.Layout.TradeBookingResponseView)
{
}
protected override void OnViewModelSet()
{
SetContentView(Resource.Layout.TradeBookingResponseView);
var list = FindViewById<ListView>(Resource.Id.TradeConfirmation);
list.Adapter = new CustomAdapter(this, (IMvxAndroidBindingContext) BindingContext);
}
}
public class CustomAdapter : MvxAdapter
{
public CustomAdapter(Context context) : base(context)
{
}
public CustomAdapter(Context context, IMvxAndroidBindingContext bindingContext) : base(context, bindingContext)
{
}
protected override View GetBindableView(View convertView, object dataContext)
{
convertView.SetBackgroundColor(Color.Red);
return base.GetBindableView(convertView, dataContext);
}
}
Где ViewBase
расширяет MvxActivity
И я устанавливаю красный просто чтобы увидеть, если она вызывается (это не делает). В соответствии с другими примерами Android-y я хочу использовать View GetView(int position, View convertView, ViewGroup parent)
, чтобы узнать, в какой позиции находится элемент, поэтому я могу сделать% 2 на нем (это также не вызывается).