StartActivityForResult вернуться назад

Я использую StartActivityForResult для нескольких действий. Моя основная деятельность заключается в том, где я ее инициализирую. В моем втором действии я ввожу некоторые значения и перехожу к третьему действию. Теперь, когда я нахожусь в третьем действии, я хочу иметь возможность вернуться ко второму действию, если когда-либо захочу отредактировать значения, которые я передал. Что я должен делать?

MainAct.java

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == REQUEST_CODE)
    {
        if (resultCode == Activity.RESULT_OK)
        {
            //Something
        }
    }

SecondAct.java

 Intent vd2 = new Intent(ViolatorDetails1.this,ViolatorDetails2.class);
                vd2.putExtra("name",name);
                vd2.putExtra("lname",lname);
                vd2.putExtra("lnumber",lnumber);
                vd2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                vd2.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
                startActivity(vd2);
                finish();

ThirdAct.java

 Intent intent = new Intent();
            intent.putExtra("firstname",name);
            intent.putExtra("lastname", lname);
            intent.putExtra("licensenumber", lnumber);
            setResult(Activity.RESULT_OK, intent);
            finish();

Как я могу вернуться ко второму действию из третьего действия, чтобы изменить некоторые значения, если когда-либо?


person Ekko Sky    schedule 20.08.2017    source источник
comment
Если это что-то вроде многостраничной формы, было бы проще использовать одно действие и несколько фрагментов или разные представления.   -  person Ridcully    schedule 20.08.2017


Ответы (2)


Вы не должны вызывать finish() для второго действия при запуске третьего.

Затем onActivityResult() будет вызываться, когда третье действие будет завершено.

Вызов

startActivityForResult(vd2);

вместо

startActivity(vd2);
person smora    schedule 20.08.2017
comment
Мне жаль. Глупый вопрос, но что вы имеете в виду под onActivityResult()? Где я должен назвать это? потому что я уже сделал на первом мероприятии. - person Ekko Sky; 20.08.2017
comment
onActivityResult действия (A) вызывается, когда действие (B), которое вы начинаете с действия (A) с помощью startActivityForResult (), завершено. Если вы запускаете другое действие (C) из действия (B), вам следует реализовать onActivityResult в действии (B), чтобы определить завершение действия (C). хехе не так просто объяснить! - person smora; 20.08.2017
comment
И это андроид, который автоматически вызывает onActivityResult(), а не вы. Вы должны просто переопределить, если вам нужно. - person smora; 20.08.2017
comment
@smora Пожалуйста, прочитайте это, прежде чем давать ответ. - person UmarZaii; 20.08.2017
comment
@UmarZaii хорошо, спасибо, но я не понимаю. Вы знаете, что я стараюсь сделать все возможное, чтобы ответить на этот вопрос, вы можете дать свой собственный ответ, если считаете, что мой не очень хорош, и я тоже буду рад извлечь из этого урок. - person smora; 20.08.2017

просто удалите finish();

 Intent vd2 = new Intent(ViolatorDetails1.this,ViolatorDetails2.class);
                vd2.putExtra("name",name);
                vd2.putExtra("lname",lname);
                vd2.putExtra("lnumber",lnumber);
                vd2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                vd2.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
                startActivity(vd2);
                finish(); //remove this line

таким образом, когда ваше третье действие закроется, пользователь вернется ко второму, также вы должны реализовать onActivityResult в своем втором действии, чтобы вы могли обрабатывать погоду, которую пользователь хочет отредактировать или закончил, и должен вернуться к 1-му действию! (т.е. установка результата намерения произошла из 1-го действия и закончила 2-е!)


вот что я имею в виду в коде: во втором действии сделайте это,

@override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE)
    {
        if (resultCode == Activity.RESULT_OK)
        {
           // user should have done his job on 3rd activity and we should finish the 2nd activity to go back to first activity!
        }else{
          //user still editing!
        }
    }

и вместо startActivity(vd2); сделать startActivityForResult(vd2);

person ATEF    schedule 20.08.2017
comment
Что я хочу сделать, так это то, что когда я нахожусь в третьем действии, когда пользователь нажимает кнопку «Назад», я хочу иметь возможность вернуться ко второму действию и отредактировать несколько текстов редактирования. Но когда пользователь нажимает кнопку в третьем действии, он должен вернуться к первому действию для выполнения некоторых методов. Я сделал то, что вы сказали, чтобы включить второе задание, но ничего не происходит. - person Ekko Sky; 20.08.2017
comment
protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE) { if (resultCode == Activity.RESULT_OK) { Intent intent = new Intent(); setResult(Activity.RESULT_OK, intent); finish(); } коды, которые я поставил на 2-е занятие - person Ekko Sky; 20.08.2017
comment
@EkkoSky Если вы правильно следовали моему коду, теперь вам нужно обработать два случая! в обоих случаях пользователь нажмет backbtn на 3-м действии и вернется ко 2-му действию. но во 2-м действии, в onActivityResult, вы должны решить, оставаться ли во 2-м действии, чтобы редактировать edittexts, или вернуться к 1-му действию и выполнять методы! - person ATEF; 20.08.2017
comment
@EkkoSky, пожалуйста, объясните вашу проблему более подробно после прочтения моего первого комментария! - person ATEF; 20.08.2017