private void NovoEstabelecimento_Click(object sender, EventArgs e) { EditText editTextEstabelecimento = new EditText(this); AlertDialog.Builder dialog = new AlertDialog.Builder(this); dialog.SetTitle("Nome do Estabelecimento"); dialog.SetView(editTextEstabelecimento); dialog.SetPositiveButton("OK", (senderAlert, args) => { var estabelecimento = new Models.Estabelecimento(); estabelecimento.Id = MainActivity.Dados.Estabelecimentos.Max(est => est.Id) + 1; estabelecimento.Nome = editTextEstabelecimento.Text; MainActivity.Dados.Estabelecimentos.Add(estabelecimento); _spinnerEstabelecimento.Adapter = new ArrayAdapter <string>(this, global::Android.Resource.Layout.SimpleSpinnerItem, MainActivity.Dados.Estabelecimentos.Select(est => est.Nome).ToArray()); _spinnerEstabelecimento.SetSelection(MainActivity.Dados.Estabelecimentos.IndexOf(estabelecimento)); }); dialog.SetNegativeButton("Cancelar", (IDialogInterfaceOnClickListener)null); dialog.Show(); }
protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data) { base.OnActivityResult(requestCode, resultCode, data); if (resultCode == Result.Ok) { var id = data.Extras.GetInt("Id"); var excluido = data.Extras.GetBoolean("Excluido"); // Se o gasto não foi excluído, vamos atualizá-lo if (!excluido) { var gasto = Dados.Gastos.FirstOrDefault(g => g.Id == id); // Gasto nulo quer dizer que o usuário está criando um novo gasto. if (gasto == null) { gasto = new Models.Gasto() { Id = 1 }; if (Dados.Gastos.Any()) { gasto.Id = Dados.Gastos.Max(g => g.Id) + 1; } Dados.Gastos.Add(gasto); } var dataAnterior = gasto.Data.Date; var dataNova = new DateTime(data.Extras.GetLong("Data")).Date; gasto.Data = dataNova; gasto.Valor = Convert.ToDecimal(data.Extras.GetDouble("Valor")); var nomeEstabelecimento = data.Extras.GetString("Estabelecimento"); var estabelecimento = Dados.Estabelecimentos.FirstOrDefault(e => string.Compare(e.Nome, nomeEstabelecimento, StringComparison.InvariantCultureIgnoreCase) == 0); if (estabelecimento == null) { estabelecimento = new Models.Estabelecimento() { Nome = nomeEstabelecimento }; } gasto.Estabelecimento = estabelecimento; // Se a data anterior for diferente da nova, nós precisamos ajustar o pai do gasto na lista de ListViewGroups. if (!dataAnterior.Equals(dataNova)) { var listViewGroupAnterior = _listViewGroups.FirstOrDefault(lvg => lvg.Data.Equals(dataAnterior)); if (listViewGroupAnterior != null) { listViewGroupAnterior.Gastos.Remove(gasto); } var listViewGroupNovo = _listViewGroups.FirstOrDefault(lvg => lvg.Data.Equals(dataNova)); if (listViewGroupNovo == null) { listViewGroupNovo = new ListViewGroup() { Data = dataNova }; _listViewGroups.Add(listViewGroupNovo); } listViewGroupNovo.Gastos.Add(gasto); _listViewGroups.Sort((lvg1, lvg2) => lvg1.Data.CompareTo(lvg2.Data)); } } // Se o gasto está sendo excluído, nós temos que removê-lo do ListView também. else { var listViewGroup = _listViewGroups.FirstOrDefault(lvg => lvg.Gastos.Any(g => g.Id == id)); if (listViewGroup != null) { var gasto = listViewGroup.Gastos.First(g => g.Id == id); listViewGroup.Gastos.Remove(gasto); } } // Notificando que os dados foram alterados para dar um refresh no ListView. _adapter.NotifyDataSetChanged(); ExpandirTodosOsGruposDoListView(); Dados.Salvar(); } }