2017-04-23 1 views
0

J'ai la vue suivante dans laquelle le contenu de AppCompatEditText doit être lié à la propriété "ArticleName" du ViewModel. Cela fonctionne très bien dans les versions de débogage mais pas dans les versions de version. Quelle est la raison de cet effet? C'est un ViewModel assez basique d'une boîte de dialogue.La liaison de données avec AppCompatEditText ne fonctionne pas dans la version Release

<RelativeLayout xmlns:local="http://schemas.android.com/apk/res-auto" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:minWidth="25px" 
    android:minHeight="25px"> 
    <TextView 
     android:id="@+id/txtHeadline" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="@dimen/activity_vertical_margin" 
     android:textAppearance="@android:style/TextAppearance.DialogWindowTitle" 
     android:text="New item" /> 
    <AppCompatEditText 
     android:id="@+id/editArticleName" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/txtHeadline" 
     local:MvxBind="Text ArticleName" /> 
    <Button 
     android:id="@+id/btnAdd" 
     android:text="Add" 
     android:layout_below="@id/editArticleName" 
     android:layout_alignParentRight="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="@color/colorPrimary" 
     local:MvxBind="Click AddItem;Enabled CanAddItem" 
     style="?android:attr/borderlessButtonStyle" /> 

ViewModel:

public class MyViewModel : MvxViewModel 
    { 
     private string m_ArticleName; 

     public string ArticleName 
     { 
      get 
      { 
       return m_ArticleName; 
      } 

      set 
      { 
       m_ArticleName = value; 
       RaiseAllPropertiesChanged(); 

       // this setter is never called 
      } 
     } 

     public MvxCommand AddItem 
     { 
      get; 
      private set; 
     } 

     public bool CanAddItem 
     { 
      get 
      { 
       return !String.IsNullOrEmpty(m_ArticleName); 
      } 
     } 

     public MyViewModel() 
     { 
      AddItem = new MvxCommand(doAddItem); 
     } 

     private void doAddItem() 
     { 
      // is never called in releases build because CanAddItem is never true 
     } 
    } 

J'ai aussi ajouté la déclaration suivante à LinkerPleaseInclude.cs sans effet:

public void Include(AppCompatEditText text) 
    { 
     text.TextChanged += (sender, args) => text.Text = "" + text.Text; 
     text.Hint = "" + text.Hint; 
     text.Text = "Test"; 
    } 

Edit:

Le même effec t se produit si j'échange l'AppCompatEditText avec un EditText normal.

+0

si le travail de quelque chose dans la version de débogage et ne fonctionne pas en mode de libération ne vérifient proguard. – Killer

+0

Proguard n'est pas actif (jamais changé ce paramètre) –

Répondre

1

Dans MvvmCross, l'événement de liaison de texte a été modifié pour utiliser AfterTextChanged.

Ainsi, vous pouvez faire le changement suivant dans votre LinkerPleaseInclude.cs

text.AfterTextChanged += (sender, args) => text.Text = "" + text.Text;

+0

Fantastique! Ça marche. Sauvé ma journée. –