可见性转换器上的MvvmCross Android链接问题

时间:2014-12-02 14:37:57

标签: android linker visibility mvvmcross

我知道Android存在链接问题,我知道使用LinkerPleaseInclude。但是我不确定将什么放入LinkerPleaseInclude.cs文件中以解决我遇到的问题。

我有一个视图,它使用Visibility转换器使用布尔值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);
    }

这些似乎都不起作用。有人帮助我,让我知道我应该投入什么来获得工作的可见性

1 个答案:

答案 0 :(得分:8)

问题在于,在构建Android应用程序的发布版本时,您有时会发现某些行为不起作用。这是由于它链接程序的方式。我认为它以一种方式优化,删除它认为不使用的代码。要在基于MvvmCross的应用程序中修复它,您必须将调用添加到您认为已优化的代码中。这是通过使用LinkerPleaseInclude.cs文件并添加对&#34; missing&#34;的调用来完成的。码。在这种情况下,ProgressBar控件上的可见性无效。我曾尝试将代码添加到LinkerPleaseInclude.cs文件,但它无法正常工作。我找到了解决方案并添加了答案。

我将以下代码放入LinkerPleaseInclude.cs。我认为它有效,因为它同时使用了setter和getter

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