簡體   English   中英

碎片不起作用的startActivityForResult

[英]startActivityForResult From Fragment Not Working

我幾個小時以來一直在與這個問題作斗爭,幾乎關於這個問題的所有其他帖子,但找不到我出錯的地方。 如果我遺漏了一些簡單的話,請告訴我。

活動1(托管CreateFragment)

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    ((CreateFragment) getFragmentManager().findFragmentByTag(CreateFragment.TAG)).resultReturned(requestCode, resultCode, data);
}

CreateFragment:

private void chooseContact() {
    Intent chooseContactInappIntent = new Intent( getActivity(), ContactPickerActivity.class );
    getActivity().startActivityForResult( chooseContactInappIntent, PICK_CONTACT_REQUEST );
}

 public void resultReturned( int requestCode, int resultCode, Intent data ) {
    switch ( requestCode ) {
        case PICK_CONTACT_REQUEST:
            if ( resultCode == Activity.RESULT_OK ) {
               //Do Cool Things
        default:
            break;
    }
}

ContactPickerActivity:

@Override
public void onContactSelected( Object data) {
    Intent returnIntent = new Intent();
    returnIntent.putExtra("data",data);
    setResult(RESULT_OK,returnIntent);
    finish();
}

Activity One托管CreateFragment,當用戶單擊CreateFragment中的按鈕時,片段調用chooseContact()方法,該方法啟動一個新的ActivityForResult。 然后,ContactPickerActivity向用戶顯示聯系人列表。 當用戶選擇聯系人時,調用onContactSelected方法創建新的意圖以傳回所選數據,然后調用finish。 我認為這將調用基本活動中的onActivityResult或CreateFragment,但都不會調用。

有任何想法嗎?

謝謝,內森

在Fragment類中,如果在MainActivity onActivityResult覆蓋方法上調用並且不需要在fragment類中進行更改,則可以正常工作。 所以在Fragment中調用startActivityForResult是這樣的:

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

        if (resultCode == RESULT_OK && (requestCode == GALLERY_REQUEST || requestCode == CAMERA_REQUEST)) {

          // its not complicated .....    
        }
}

在MainActivity類中也必須調用onActivityResult。

  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        for (Fragment fragment : getSupportFragmentManager().getFragments()) {
            fragment.onActivityResult(requestCode, resultCode, data);
        }

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM