На деятельность закончена - PullRequest
0 голосов
/ 06 марта 2020

Я занимаюсь разработкой приложения для заметок, и мне нужно перезагрузить заметки в представлении, когда Редактор заметок закрыт (я использую Finish(), чтобы закрыть Редактор) , но я не уверен, как ждать, пока действие не закроется и что-то не будет сделано.

Я запускаю действие редактора следующим образом:

public async void noteClicked(object sender, EventArgs e)
        {
            var obj = (RelativeLayout)sender;
            var id = obj.Id;
            var note = Util.db.Query<Note>(string.Format("SELECT * FROM Notes WHERE ID={0}", id));

            var intent = new Intent(this, typeof(EditorAcitivity));
            intent.PutExtra("Note", JsonConvert.SerializeObject(note));
            intent.PutExtra("Mode", "Edit");
            StartActivity(intent);
        }

На EditorActivity.cs:

protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.editor_activity);

            Util.context = this;

            mode = Intent.GetStringExtra("Mode");
            txtTitle = FindViewById<EditText>(Resource.Id.editorTitle);
            txtText = FindViewById<EditText>(Resource.Id.editorText);

            if (mode == "Edit")
            {
                note = JsonConvert.DeserializeObject<Note>(Intent.GetStringExtra("Note"));
                txtTitle.Text = note.title;
                txtText.Text = note.text;
            }

            FindViewById<ImageButton>(Resource.Id.editorDelete).Click += editorDelete_Clicked;
            FindViewById<ImageButton>(Resource.Id.editorSave).Click += editorSave_Clicked;
        }
private void editorSave_Clicked(object sender, EventArgs e)
        {
            if (txtText.Text.Length == 0 || string.IsNullOrWhiteSpace(txtText.Text))
            {
                Util.makeShortText("Null text");
            }
            else
            {
                var note = new Note();
                note.date = Util.now();
                note.text = txtText.Text;
                if (string.IsNullOrWhiteSpace(txtTitle.Text))
                {
                    note.title = " ";
                }
                else {
                    note.title = txtTitle.Text;
                }
                Util.db.Insert(note);
                this.Finish();
            }
        }

Я хочу сделать что-то вроде loadNotes(), когда действие будет завершено (this.Finish())

Редактировать: Надеюсь не хочу возвращать некоторые данные, просто дождитесь активности.

1 Ответ

1 голос
/ 06 марта 2020

Я бы предложил вам использовать StartActivityForResult

var intent = new Intent(this, typeof(EditorAcitivity));
intent.PutExtra("Note", JsonConvert.SerializeObject(note));
intent.PutExtra("Mode", "Edit");
StartActivityForResult(intent,REQUEST_CODE_EDITOR_ACITIVTY);

. В этом случае REQUEST_CODE_EDITOR_ACITIVTY - это целочисленная константа.

А затем, когда вы собираетесь завершить sh свою деятельность вызовите метод SetResult, как показано ниже

Util.db.Insert(note);            
SetResult(Result.Ok);
this.Finish();

И, наконец, переопределите метод OnActivityResult в том же упражнении, в котором вы запускаете EditorAcitivity, как показано ниже

protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
{
    base.OnActivityResult(requestCode, resultCode, data);
    if(requestCode == REQUEST_CODE_EDITOR_ACITIVTY) {
       if(resultCode == Result.Ok) {
        //Here your activity received the callback and you can call the load notes method
        loadNotes();
       }
    }
}

Take Посмотрите этот урок, если вы хотите узнать больше о Activity for result

https://subscription.packtpub.com/book/application_development/9781784398576/8/ch08lvl1sec84/obtaining-data-from-activities

...