Nano Hash - криптовалюты, майнинг, программирование

MvxListView с пользовательским MvxAdapter не работает в MvxFragment

Я пытаюсь показать MvxListView с пользовательским MvxAdapter во фрагменте, но ListView никогда не отображается. Я отлаживал, и метод GetView в моем адаптере никогда не вызывался. Кто-нибудь может мне помочь?

Я использую MvvmCross 4.0 и фрагмент пространства имен MvvmCross.Droid.FullFragging.

Мой MvxAdapter

public class OcorrenciasListAdapter : MvxAdapter
{
    private Context _context;

    public OcorrenciasListAdapter(Context context, IMvxAndroidBindingContext bindingContext) : base(context, bindingContext)
    {
        _context = context;
    }      

    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        var inflater = LayoutInflater.From(_context);
        convertView  = inflater.Inflate(Resource.Layout.OcorrenciaItem, parent, false);
        var ocorrencia = (Ocorrencia) GetRawItem(position);
        var txtViewSintomas = convertView.FindViewById<TextView>(Resource.Id.txtViewSintomas);

        StringBuilder textoSintomas = new StringBuilder(ocorrencia.sintomas[0].nome);            

        if (ocorrencia.sintomas.Count >= 3)
        {
            for (int i = 1; i < 3; i++)
            {
                textoSintomas.Append(", ");
                textoSintomas.Append(ocorrencia.sintomas[i].nome);
            }
        }
        else
        {
            for (int i = 1; i < ocorrencia.sintomas.Count; i++)
            {
                textoSintomas.Append(", ");
                textoSintomas.Append(ocorrencia.sintomas[i].nome);
            }
        }

        txtViewSintomas.Text = textoSintomas.ToString();

        var txtViewData = convertView.FindViewById<TextView>(Resource.Id.txtViewData);
        txtViewData.Text = ocorrencia.cadastro.ToString("dd/MM/yyyy");

        if (ocorrencia.confirmadoMedico)
        {
            var txtViewConfirmado = convertView.FindViewById<TextView>(Resource.Id.txtViewConfirmacao);
            txtViewConfirmado.Text = "Confirmado pelo médico";
        }

        return convertView;
    }
}

Мой фрагмент:

public class OcorrenciaView : MvxFragment<OcorrenciaViewModel>
{
    private MvxListView _lstViewOcorrencias;

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        base.OnCreateView(inflater, container, savedInstanceState);
        var view = this.BindingInflate(Resource.Layout.OcorrenciaView, null);
        _lstViewOcorrencias = view.FindViewById<MvxListView>(Resource.Id.lstViewOcorrencias);

        var btnAdicionar = view.FindViewById<FloatingActionButton>(Resource.Id.btnAdicionar);

        btnAdicionar.AttachToListView(_lstViewOcorrencias);

        _lstViewOcorrencias.Adapter = new OcorrenciasListAdapter(Activity, (IMvxAndroidBindingContext)this.BindingContext);

        return view;
    }
}

Мой макет фрагмента

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:local="http://schemas.android.com/apk/res-auto/AppDemia.Droid"
xmlns:fab="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:gridSpec="1|8|#0093eeff|K:#ee8700ff:16,l:72,l:16,r|S:#83ee00ff:16,0,l:16,56,l:16,0,r"
android:background="@color/appdemia_branco"
android:orientation="vertical"
android:id="@+id/Content">
<com.refractored.fab.FloatingActionButton
    android:id="@+id/btnAdicionar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|right"
    android:src="@drawable/ic_add_mini"
    android:tint="@color/appdemia_branco"
    local:MvxBind="Click CriarOcorrenciaCommand"
    fab:fab_colorNormal="@color/appdemia_laranja"
    fab:fab_colorPressed="@color/appdemia_laranjaEscuro" />
<Mvx.MvxListView
    android:id="@+id/lstViewOcorrencias"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:divider="#aeaeae"
    android:dividerHeight="1px"
    android:clickable="true"
    android:focusableInTouchMode="true"
    android:choiceMode="singleChoice"
    local:MvxBind="ItemsSource Ocorrencias; SelectedItem ObjEntidade; ItemClick ItenClickCommand; "
    local:MvxItemTemplate="@layout/ocorrenciaitem" />

My listview iten layout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@color/appdemia_branco"
android:orientation="vertical"
android:padding="5dp">
<TextView
    android:id="@+id/txtViewSintomas"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:textColor="#606060"
    android:layout_alignParentLeft="true"
    android:typeface="sans"
    android:textSize="15dip"
    android:textStyle="bold" />
<TextView
    android:id="@+id/txtViewData"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/txtViewSintomas"
    android:layout_alignParentRight="true"
    android:textColor="#606060"
    android:typeface="sans"
    android:textSize="15dip"
    android:textStyle="bold" />
<TextView
    android:id="@+id/txtViewConfirmacao"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/txtViewSintomas"
    android:textColor="#343434"
    android:textSize="10dip"
    android:layout_marginTop="1dip"
    android:layout_alignParentLeft="true" />

18.03.2016

Ответы:


1

Наконец я обнаружил проблему: свойство ViewModel в моем классе MvxFragment (OcorrenciaView) не создавалось экземпляром. Я часто использую MvxActivity, и мне не нужно создавать экземпляр свойства ViewModel, потому что базовый класс (MvxActivity) создает его экземпляр, тогда я думаю, что MvxFragment имел такое же поведение. Теперь я просто создаю экземпляр свойства ViewModel в конструкции OcorrenciaView, и MvxListView показывает элементы.

PS: Прошу прощения за английские ошибки. Я бразилец, и мой английский очень ограничен.

18.03.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..