3

我一直在與這個問題爭取了幾個小時,並已經看過幾乎所有其他職位關於這個問題,但無法找到我要去哪裏錯了。請讓我知道我是否缺少一些簡單的東西。startActivityForResult從片段不工作

活動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(); 
} 

活動一臺主機一個CreateFragment,當使用點擊了按鈕CreateFragment片段調用啓動一個新Activity的chooseContact()方法ForResult。 ContactPickerActivity然後向用戶顯示聯繫人列表。當用戶選擇一個聯繫人時,調用onContactSelected方法創建一個新的意圖來傳回選定的數據,然後調用完成。我以爲這會調用基本活動或CreateFragment中的onActivityResult,但都不會被調用。

任何想法?

感謝, 彌敦道

回答

0

在片段級做工精細,如果你撥打MainActivity onActivityResult覆蓋方法,你不需要的片段類內部的變化。 所以 在片段調用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); 
     } 

    }