2017-09-29 19 views
1

Je suis nouveau sur Xamarin et je suis en train de sauver mon état de case à cocher, même si l'application est fermée parce que quand je le fermer la remise à zéro de case à décocher l'état ...case à cocher Enregistrer l'état android Xamarin

aussi .. la l'image qui a été changée se réinitialise ... est-il possible de conserver les deux?

protected override void OnCreate(Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 

     SetContentView(Resource.Layout.layout1); 

     var seletor = FindViewById<CheckBox>(Resource.Id.checkBox1); 
     var imagem = FindViewById<ImageView>(Resource.Id.imageView1); 

     seletor.Click += (o, e) => { 
      if (seletor.Checked) 
       imagem.SetImageResource(Resource.Drawable.estado1); 

      else 
       imagem.SetImageResource(Resource.Drawable.estado2); 

     }; 
    } 

Répondre

0

Avez-vous essayé d'utiliser les préférences?

Vérifiez les points suivants: How to save user settings

magasin l'option sélectionnée onclose ou suspendent .. et récupérer onResume/OnLoad

Quelque chose comme:

// Function called from OnDestroy 
protected void saveset(){ 

    //store 
    var prefs = Application.Context.GetSharedPreferences("MyApp", FileCreationMode.Private); 
    var prefEditor = prefs.Edit(); 
    prefEditor.PutString("PrefName", "Some value"); 
    prefEditor.Commit(); 

} 

// Function called from OnCreate 
protected void retrieveset() 
{ 
    //retreive 
    var prefs = Application.Context.GetSharedPreferences("MyApp", FileCreationMode.Private);    
    var somePref = prefs.GetString("PrefName", null); 

    //Show a toast 
    RunOnUiThread(() => Toast.MakeText(this, somePref, ToastLength.Long).Show()); 

} 

comme dans le lien fourni.

Bien sûr, vous devrez vous adapter à vos besoins et obtenir/remplir la valeur de la case à cocher.

Si vous le souhaitez, vous pouvez également implémenter un type de base de données et utiliser le même mécanisme pour conserver et récupérer les paramètres.

Cela est généralement ce que j'utilise pour stocker les paramètres et les valeurs que je persiste besoin de « se souvenir »

Ceci est un exemple de la façon dont j'utilise le même comportement dans une application .. pas pour une case à cocher. mais vous pouvez voir comment cela fonctionne. J'ai enlevé du code, mais je pense que ça devrait être un bon exemple.

[Activity(Label = "@string/ApplicationName", 
     Icon = "@drawable/Icon")] 
    public class PersonalDetailsActivity : Activity 
    { 
     ... 
     private ISharedPreferencesEditor prefEditor; 
     private ISharedPreferences preferences; 
     ... 

     protected override void OnCreate(Bundle savedInstanceState) 
     { 
      base.OnCreate(savedInstanceState); 

      SetContentView(Resource.Layout.PersonalDetailView); 

      preferences = Application.Context.GetSharedPreferences("AppName", FileCreationMode.Private); 


      PopulatePersistedData(); 
     } 

     private void PopulatePersistedData() 
     { 
      myId = preferences.GetInt(nameof(myData.Id), 0); 

      name.Text = preferences.GetString(nameof(myData.Name), null); 
      address.Text = preferences.GetString(nameof(myData.Address), null); 
      city.Text = preferences.GetString(nameof(myData.City), null); 
      county.Text = preferences.GetString(nameof(myData.County), null); 
      emailAddress.Text = preferences.GetString(nameof(myData.Email), null); 
      phoneNumber.Text = preferences.GetString(nameof(myData.PhoneNumber), null); 
      bio.Text = preferences.GetString(nameof(myData.Bio), null); 
      rating.Rating = 5; 

     } 

     private void SaveButton_Click(object sender, EventArgs e) 
     { 
      prefEditor = preferences.Edit(); 

      myData = new Citizen(); 

      myData.Name = name.Text; 
      myData.Address = address.Text; 
      myData.City = city.Text; 
      myData.County = county.Text; 
      myData.Email = emailAddress.Text; 
      myData.PhoneNumber = phoneNumber.Text; 
      myData.Bio = bio.Text; 

      prefEditor.PutInt(nameof(myData.Id), myId); 
      prefEditor.PutString(nameof(myData.Name), myData.Name); 
      prefEditor.PutString(nameof(myData.Address), myData.Address); 
      prefEditor.PutString(nameof(myData.City), myData.City); 
      prefEditor.PutString(nameof(myData.County), myData.County); 
      prefEditor.PutString(nameof(myData.Email), myData.Email); 
      prefEditor.PutString(nameof(myData.PhoneNumber), myData.PhoneNumber); 
      prefEditor.PutString(nameof(myData.Bio), myData.Bio); 

      prefEditor.Apply(); 
      prefEditor.Commit(); 

      var intent = new Intent(); 
      intent.PutExtra("CitizenName", name.Text); 

      SetResult(Result.Ok, intent); 
      this.Finish(); 
     } 
    } 
+0

Je ne sais pas comment adapter ce code pour mon utilisation. –

+0

Fondamentalement, créer une instance prefs onLoad, lorsque les changements de case à cocher utilisent les Prefs.Put, onResume, prefs.Get – rmjoia

+0

Je vois .. mais comment créer un "onClose" ou de suspendre? –