2017-09-29 147 views
1

我在xamarin新的,我想救我的复选框状态,即使应用程序被关闭,因为当我关闭它的复选框重置为取消选中状态......保存复选框状态的Android xamarin

也..的被改变的图像重置..有什么办法可以保存两者吗?

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); 

     }; 
    } 

回答

0

您是否尝试过使用首选项?

检查以下内容:How to save user settings

商店的OnClose选择的选项或暂停..和检索的onResume /的OnLoad

喜欢的东西:

// 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()); 

} 

中提供的链接。

当然,您需要适应您的需求并获取/填充复选框的值。

如果你愿意,你也可以实现某种类型的数据库并使用相同的机制来保存和检索设置。

这通常是我用它来存储设置和坚持,我需要“记住”

这是我如何使用一个应用程序相同的行为的一个例子..不是一个复选框值是。但你可以看到它是如何工作的。我删除了一些代码,但我认为应该是一个很好的例子。

[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

我不知道如何修改这段代码供我使用。 –

+0

基本上,创建prefs实例onLoad,当复选框更改时使用Prefs.Put,onResume,prefs.Get – rmjoia

+0

我看到..但我如何创建一个“onClose”或暂停? –