2012-10-22 1 views
2

Comment lier l'image du chemin au bouton, à l'aide de MvxBaseAndroidTargetBinding?Image du chemin du bouton de liaison (Utilisation de MvxBaseAndroidTargetBinding) Android

1) créer une liaison

public class MvxButtonIconBinding: MvxBaseAndroidTargetBinding 
{ 
    private readonly View _view; 

public MvxButtonIconBinding(View view) 
{ 
    _view = view; 
} 

public override void SetValue(object value) 
{ 
    string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 
    path = Path.Combine(path, "pictures"); 
    path = Path.Combine(path, (string)value); 
    if (File.Exists(path)) 
    { 
     var dr = Drawable.CreateFromPath(path); 
     Button b = _view as Button; 
     var drawables = b.GetCompoundDrawables(); 
     foreach (var d in drawables) 
      if (d!=null) 
       d.Dispose(); // To avoid "out of memory" messages 
     b.SetCompoundDrawablesWithIntrinsicBounds(null, dr, null, null); 
    } 
    else 
    { 
     Console.WriteLine("File {0} does not exists", path); 
    } 
} 

public override MvxBindingMode DefaultMode 
{ 
    get { return MvxBindingMode.OneWay; } 
} 

public override Type TargetType 
{ 
    get { return typeof(string); } 
} 

protected override void Dispose(bool isDisposing) 
{ 
    if (isDisposing) 
    { 
    } 
    base.Dispose(isDisposing); 
} 

}

2) Configuration de la liaison:

registry.RegisterFactory(new MvxCustomBindingFactory<View>("ButtonIcon", view => new MvxButtonIconBinding(view))); 

3) Créer button_list.аxml

<Button 
android:id="@+id/ButtonArticle" 
android:layout_width="fill_parent" 
android:layout_height="160dp" 
android:gravity="bottom|center" 
android:paddingBottom="5dp" 
android:paddingTop="5dp" 
local:MvxBind="{'Click':{'Path':'Command1'},'ButtonIcon':{'Path':'Item.PictureFileName'}}" 
android:textSize="14dip" 
android:textColor="@drawable/ToggleButtonSelector" /> 

Quel chemin transmet les propriétés PictureFileName? Montre-moi un exemple s'il te plaît.


Taken from

Répondre

0

À partir de votre code, l'image doit être:

string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 
path = Path.Combine(path, "pictures"); 
path = Path.Combine(path, (string)value); 

Donc, si votre valeur d'entrée est Item.PictureFileName 'icon1.png' vous devez alors avoir une image enregistrée dans:

/data/data/YOUR_APP_NAME/files/pictures/icon1.png 

J'ai travaillé ceci selon les informations sur System.Environment.SpecialFolder.Personal dans Database File Location for SQLite within MonoDroid


Si vous utilisez un jeu d'icônes fixe (pas de téléchargement ou créer dynamiquement des images), alors vous pourriez être mieux d'utiliser une approche resourceID comme ça montré dans SetButtonBackground dans the conference sample

+0

Si cette explication ne fonctionne pas, alors il pourrait être une bonne idée de poster un projet exemple - par exemple à un dépôt sur GitHub. D'autres peuvent vous aider à déboguer votre projet d'exemple, mais ils n'ont peut-être pas le temps d'écrire un exemple de projet pour vous aider. – Stuart

+0

Je pense peut être utilisé FavoritesButtonBinding. Mais je ne sais pas comment retourner l'identifiant par rapport à ce nom des photos –

+0

Désolé - Je ne pense pas que je peux aider à ce niveau de question - Je ne comprends souvent pas ce que vous demandez. Peut-être essayer de construire au projet de test et de l'afficher sur Github - nous pouvons tous les deux parler le code :) – Stuart