Android setResult之后未调用onActivityResult

Android setResult之后未调用onActivityResult,android,android-intent,android-fragments,android-viewpager,Android,Android Intent,Android Fragments,Android Viewpager,我有一个活动A-在一个Viewpager中保存3个片段。片段编号1是新闻文章列表,当用户从列表中选择新闻文章时,活动B开始并显示所选文章的详细信息(标题、正文、评论)。我希望用户能够通过使用选项菜单来选择他想要返回到哪个活动片段 活动A: @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (resultCode) { case 0:

我有一个活动A-在一个Viewpager中保存3个片段。片段编号1是新闻文章列表,当用户从列表中选择新闻文章时,活动B开始并显示所选文章的详细信息(标题、正文、评论)。我希望用户能够通过使用选项菜单来选择他想要返回到哪个活动片段

活动A:

@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;
    }
}
Intent intent = new Intent();
...
startActivityForResult(intent, 0);
@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;
        }
    }
}
活动B:

@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);
    }
}
case R.id.menu_noticias:
    intent.putExtra("menu", 0);
    setResult(RESULT_OK, intent);
    finish();
    return true;

您不应该从活动B调用startActivityForResult。从A开始,您先调用startActivityForResult,然后从B开始,设置结果并完成活动就足够了

活动A:

@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;
    }
}
Intent intent = new Intent();
...
startActivityForResult(intent, 0);
@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;
        }
    }
}
活动B:

@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);
    }
}
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) {

    switch (resultCode) {
    case 0:
        mPager.setCurrentItem(0);
        break;
    case 1:
        mPager.setCurrentItem(1);
        break;
    case 2:
        mPager.setCurrentItem(2);
        break;
    }
}
Intent intent = new Intent();
...
startActivityForResult(intent, 0);
@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;
        }
    }
}

与“startActivityForResult未被调用”类似,当然它未被调用,您将其注释掉:
//startActivityForResult(intent,0)如何开始活动B?您应该正确地陈述您的问题,并向能够帮助您的人提出明确的问题。您在哪里致电
startActivityForResult
?如果您是从片段调用它,请改为调用
getActivity().startActivityForResult