Как получить startactivityforresult получить результат от 4-го упражнения

Я имею MainActivity От этого startActivityForResult() для 2-го activtiy но я хочу результат с 4-го activity что я должен сделать для этого?

Основная деятельность

FirstActivity

secondActivity

ThirdActivity

FourActivity

от этого я хочу получить результат от 4-го действия, но от второго до четвертого действия являются зависимыми действиями

MainActivity.java

public static String MY_RESULT=1000;

     intent=new Intent(MainActivity.this,FirstActivity.class);
                    startActivityForResult(intent,MY_RESULT);





 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (resultCode == RESULT_OK) {

            switch (requestCode) {
                case MY_RESULT:
                    String info = data.getExtras().getString("KEY");


                    if(!info.equals("")) {
                        Log.i("TAAAG", info);

                    }

                    break;
}
}
}

FirstActivity.java

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                    startActivity(intent);
finish();

SecondActivity.java

Intent intent = new Intent(SecondActivity.this, ThirdActivity.class);
                    startActivity(intent);
finish();

ThirdActivity.java

 Intent intent = new Intent(ThirdActivity.this, FourActivity.class);
                        startActivity(intent);
finish();

FourActivity.java

  Intent intent = new Intent();


         intent.putExtra("KEY", "my data in string");

                        setResult(RESULT_OK, intent);


      finish();

здесь, в MainActivity.java Я не могу получить какой-либо результат. И я хочу получить результат от FourActivity.java.Пожалуйста помоги

3 ответа

Решение

Там нет простого способа, вы должны использовать startActivityForResult() для первой и третьей деятельности и использования setResult() во всех слушать и передавать данные.

Вот пример кода:

class FirstActivity extends Activity {

    public static int MY_RESULT = 1000;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = new Intent(FirstActivity.this, FirstActivity.class);
        startActivityForResult(intent, MY_RESULT);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == MY_RESULT && resultCode == RESULT_OK) {
            String dataStr = data.getStringExtra("KEY");
            Toast.makeText(this, dataStr, Toast.LENGTH_LONG).show();
        }
    }
}

class SecondActivity extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = new Intent(SecondActivity.this, ThirdActivity.class);
        startActivityForResult(intent, FirstActivity.MY_RESULT);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == FirstActivity.MY_RESULT && resultCode == RESULT_OK) {
            setResult(resultCode, data);
            finish();
        }
    }
}

class ThirdActivity extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = new Intent(ThirdActivity.this, FourthActivity.class);
        startActivityForResult(intent, FirstActivity.MY_RESULT);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == FirstActivity.MY_RESULT && resultCode == RESULT_OK) {
            setResult(resultCode, data);
            finish();
        }
    }
}

class FourthActivity extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent data = new Intent();
        data.putExtra("KEY", "This is a test String");
        setResult(RESULT_OK, data);
        finish();
    }
}

Другие возможные решения включают в себя:

  1. Определить свой собственный Singleton который может хранить данные во время сессии приложения
  2. использование EventBus
  3. использование SharedPreferences
  4. Использовать локальную базу данных

Вы можете запустить каждое действие для результата и передать свой результат следующим образом:

FourthActivity -> ThirdActivity -> SecondActivity -> FirstActivity

В вашем третьем, втором и первом видах деятельности onActivityResult получить результат от ранее закрытого Activity,

На четвертом занятии вы поставили RESULT_OK в setResult() это хорошо, но в вашем onActivityResult просто удалите это:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK) {

                String info = data.getExtras().getString("KEY");
                if(!info.equals("")) {
                    Log.i("TAAAG", info);

  }
}

Удачного кодирования!

Другие вопросы по тегам