Проблема с привязкой MvvmCross Android к конвертеру видимости

Я знаю, что есть проблемы с связыванием с Android, и я знаю об использовании LinkerPleaseInclude. Однако я не уверен, что поместить в файл LinkerPleaseInclude.cs для проблемы, которую я вижу.

У меня есть представление, которое использует преобразователь видимости для использования логического свойства IsBusy, чтобы определить, следует ли отображать ряд элементов управления или нет. Я использую ProgressBar, TextView и ImageView. Я пробовал несколько комбинаций, чтобы решить проблему с компоновщиком.

При развертывании в качестве отладки все работает, это просто проблема выпуска.

Так, например, мой progressBar определяется следующим образом (преобразователь видимости используется таким же образом для других элементов управления)

<ProgressBar
        android:id="@+id/pbHeaderProgress"
        style="?android:attr/progressBarStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_centerInParent="true"
        local:MvxBind="Visibility Visibility(IsBusy)" />

Я добавил следующее в свой LinkerPleaseInclude.cs. Я не включил весь файл для краткости

    public void Include(ProgressBar progressBar)
    {
        progressBar.Visibility = ViewStates.Invisible;
    }

    public void Include(TextView textView)
    {
        textView.TextChanged += (sender, args) => textView.Text = "" + textView.Text;
        textView.Hint = "" + textView.Hint; 
        textView.Visibility = ViewStates.Invisible;
    }

    public void Include(ImageView imageView)
    {
        imageView.Visibility = ViewStates.Invisible;
        imageView.Visibility = ViewStates.Visible;
        imageView.Visibility = ViewStates.Gone;
    }

    public void Include(MyViewModel viewModel)
    {
        viewModel.PropertyChanged += (sender, args) => { };
    }

    public void Include(MvxVisibilityValueConverter converter)
    {
        converter.Convert(null, null, null, null);
    }

Ни один из них не работает. Может ли кто-нибудь помочь мне с этим и дать мне знать, что я должен добавить, чтобы заставить видимость работать


person rideintothesun    schedule 02.12.2014    source источник
comment
Вы на самом деле не указали проблему, которую вы видите. Что происходит? Ваш ProgressBar не отображается? Есть ли что-нибудь полезное в ваших журналах?   -  person PkL728    schedule 05.12.2014
comment
Это странно, я добавил ответ, теперь он кажется исчез   -  person rideintothesun    schedule 06.12.2014
comment
я не понял проблемы..   -  person Gabriel Bastos    schedule 08.12.2014


Ответы (1)


Проблема заключалась в том, что при создании окончательной версии приложения для Android вы иногда обнаруживаете, что некоторые функции не работают. Это связано с тем, как он связывает программу. Я полагал, что он оптимизируется таким образом, что удаляет код, который, по его мнению, не используется. Чтобы исправить это в приложении на основе MvvmCross, вы должны добавить вызовы в код, который, по вашему мнению, был оптимизирован. Это делается с помощью файла LinkerPleaseInclude.cs и добавления вызовов в «отсутствующий» код. В этом случае не работала видимость элемента управления ProgressBar. Я пытался добавить код в файл LinkerPleaseInclude.cs, но он не работал. Я нашел решение и добавил в качестве ответа.

Я поместил следующий код в LinkerPleaseInclude.cs. Я думаю, что это работает, потому что он использует как сеттер, так и геттер.

public void Include(ProgressBar ProgressBar)
{
   progressBar.Visibility = !progressBar.Visibility;
}
person rideintothesun    schedule 06.12.2014