2017-01-27 11 views
-3

私は新しいXamarinをコーディングしています。カスタムアダプターを作ったので、私のアイデアはユーザーがアプリケーションを閉じるときにすべてを保存することでした。いくつかの研究の後、私はこのコードはつもりの仕事だと思った:カスタムリストビューに間違いがあります。

List<GardenClass> MyList = new List<GardenClass>(); 

protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 
     SetContentView(Resource.Layout.Main); 
     listview.Adapter = new GardenAdapter(this, MyList); 
    } 

protected override void OnPause() 
    { 
     base.OnPause(); 
     write(); 
    } 

public void write() 
    { 
     string path = System.Environment.GetFolderPath(SpecialFolder.Personal); 
     string filename = Path.Combine(path, "Files.txt"); 

     try 
     { 
      File.WriteAllText(filename,JsonConvert.SerializeObject(MyList)); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("Failed to serialize. Reason: " + e.Message); 
      throw; 
     } 
    } 



public class GardenAdapter : BaseAdapter<GardenClass> 
{ 
    private Context MyCon; 

    List<GardenClass> items; 
    Activity context; 

    public GardenAdapter(Activity context, List<GardenClass> items) 
     : base() 
    { 
     MyCon = context; 
     this.context = context; 
     this.items = items; 
    } 

    public override long GetItemId(int position) 
    { 
     return position; 
    } 
    public override GardenClass this[int position] 
    { 
     get { return items[position]; } 
    } 
    public override int Count 
    { 
     get { return items.Count; } 
    } 



    public override Android.Views.View GetView(int position, Android.Views.View convertView, ViewGroup parent) 
    { 
     var item = items[position]; 

     Android.Views.View view; 
     if (convertView == null) { 
     view = context.LayoutInflater.Inflate(Resource.Layout.ListItem, null); 
     } else { view = convertView; } 
     view.FindViewById<TextView>(Resource.Id.textView1).Text = item.ToDo; 
     view.FindViewById<TextView>(Resource.Id.textView2).Text = "Week " + item.Week.ToString(); 
     view.FindViewById<CheckBox>(Resource.Id.checkBox1).Checked = item.Done; 

     CheckBox MyCheckBox; 
     checkding = view.FindViewById<CheckBox>(Resource.Id.checkBox1); 


     // The folowing code prevents the checkbox of stealing the focus, which make a singular listview item unclickable 
     MyCheckBox.Focusable = false; 
     MyCheckBox.FocusableInTouchMode = false; 
     MyCheckBox.Clickable = true; 

     return view; 

    } 
} 

[Serializable] 
public class ZaaiSpul 
{ 
    public int Week { get; set; } 
    public string ToDo { get; set; } 
    public bool Done { get; set; } 
} 

しかしOnPause()関数が呼び出されたときに、その後、MyListは(デバッガでそれを自分自身を見て)私に誤った情報を提供します。

私は間違ったことをやったことは申し訳ありませんが、私はXamarinが初めてです。 私があなたを助けてくれることを願っています。

+2

「間違った情報」を定義できますか? – Gusman

+2

Checkboxの状態が保存されていないことを意味する場合は、リストボックス内の – Selvin

+0

のチェックボックスの状態が間違っています。 –

答えて

0

あなたはチェックボックスの状態を読んでいるだけで、変更があったら保存することはありません。あなたのGetViewにこれを追加してください:

  MyCheckBox.CheckedChange += (sender, e) => 
      { 
       items[position].Done = e.IsChecked; 
      }; 
関連する問題