onActivityResult ไม่ถูกเรียกหลังจาก setResult

ฉันมีกิจกรรม A ซึ่งเก็บ 3 ส่วนใน Viewpager ส่วนที่ 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;
    }
}

กิจกรรม ข:

@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
คุณจะเริ่มกิจกรรม B ได้อย่างไร?   -  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