onActivityResult не вызывается после setResult

У меня есть активность A, которая содержит 3 фрагмента в Viewpager. Фрагмент номер 1 представляет собой список новостных статей, когда пользователь выбирает новостную статью из списка, запускается действие B и показывает детали (заголовок, тело, комментарии) выбранной статьи. Я хотел бы, чтобы пользователь мог выбрать, к какому фрагменту действия А он хочет вернуться, используя меню параметров.

Деятельность А:

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

    switch (resultCode) {
    case 0:
        mPager.setCurrentItem(0);
        break;
    case 1:
        mPager.setCurrentItem(1);
        break;
    case 2:
        mPager.setCurrentItem(2);
        break;
    }
}

Деятельность Б:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    Intent intent = new Intent(this, MainActivity.class);
    switch (item.getItemId()) {
        case R.id.menu_noticias:
            //startActivityForResult(intent, 0);
            setResult(0, intent);
            finish();
            return true;
        case R.id.menu_contactos:
            //startActivityForResult(intent, 1);
            setResult(1, intent);
            finish();
            return true;
        case R.id.menu_cumples:
            //startActivityForResult(intent, 2);
            setResult(2, intent);
            finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

person Ignacio Garat    schedule 04.03.2015    source источник
comment
аналогично stackoverflow.com/questions/7920038 /   -  person Atish Agrawal    schedule 04.03.2015
comment
startActivityForResult не вызывается, конечно, он не вызывается, вы его закомментировали: //startActivityForResult(intent, 0);   -  person Micky    schedule 04.03.2015
comment
Как начать деятельность Б?   -  person Javi Mollá    schedule 04.03.2015
comment
Вы должны правильно сформулировать свою проблему и задать четкий вопрос людям, которые смогут вам помочь.   -  person Micky    schedule 04.03.2015
comment
Куда ты звонишь startActivityForResult? Если вы вызываете его из фрагмента, вместо этого вызовите getActivity().startActivityForResult   -  person Pedro Oliveira    schedule 04.03.2015
comment
@PedroOliveira Я называю это из действия B.   -  person Ignacio Garat    schedule 04.03.2015
comment
@JavierMollá эта часть работает нормально, я начинаю ее с намерением   -  person Ignacio Garat    schedule 04.03.2015
comment
@kim исправил, что заголовок onActivityResult не вызывается   -  person Ignacio Garat    schedule 04.03.2015


Ответы (1)


Вы не должны вызывать startActivityForResult из действия B. Из A вы начинаете действие B, вызывая startActivityForResult, а затем из B достаточно установить результат и завершить действие

Деятельность А:

Intent intent = new Intent();
...
startActivityForResult(intent, 0);

Деятельность Б:

case R.id.menu_noticias:
    intent.putExtra("menu", 0);
    setResult(RESULT_OK, intent);
    finish();
    return true;

Затем в действии A:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        int menu = data.getExtraInt("menu");
        switch (menu) {
        case 0:
            mPager.setCurrentItem(0);
            break;
        }
    }
}
person Javi Mollá    schedule 05.03.2015