簡體   English   中英

片段的onActivityResult

[英]onActivityResult For Fragment

我目前有一個托管單個片段的基本活動。 在片段內部,我有一個啟動聯系人選擇器的方法。

private void chooseContacts() {
    Intent pickContactIntent = new Intent(Intent.ACTION_PICK,      ContactsContract.Contacts.CONTENT_URI);
    pickContactIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
}

當此活動返回時,我應該如何捕獲結果。 我試過添加一個

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

我的基本Activity和片段都沒有被觸發。 如果可能的話,我想讓片段處理返回,以免混淆活動。

請告訴我這種情況下的最佳做法。

更新:

如果我改變:

startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);

getActivity().startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);

然后它工作,但其他帖子讓我認為這是不正確的。

我認為你應該仍然在片段中直接使用調用startActivityForResult() ,不要使用getActivity().startActivityForResult()

我在Fragment中調用startActivityForResult()在Fragment中實現onActivityResult ,正確調用onActivityResult()

你不能在activity中調用startActivityForResult() ,否則不會調用Fragment中的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);
    }
}

片段的onActivityCreated用於另一個目的:

在創建片段的活動並且實例化此片段的視圖層次結構時調用。 一旦這些部分就位,它可用於進行最終初始化,例如檢索視圖或恢復狀態。 對於使用setRetainInstance(boolean)保留其實例的片段也很有用,因為此回調告訴片段何時與新活動實例完全關聯。 這是在onCreateView(LayoutInflater,ViewGroup,Bundle)之后和onViewStateRestored(Bundle)之前調用的。

這是從文檔中提取的

主要是使用片段,您將膨脹並返回onCreateView的視圖,在ListAdapter中執行視圖操作(如在ListView中設置onViewCreated 並在onActivityCreated執行初始化操作(如顯示歡迎對話框或類似的東西)。

你有幾個選擇,我不太確定你的問題會更好:

  • 我會做什么will'be做findFragmentByIdonActivityResult活動的,如果碎片不null ,執行該處理來自片段中的聯系人列表后面的方法。

  • 另一種方法是在活動的onActivityResult中觸發BroadCastReceiver ,並注冊片段以偵聽該廣播。 但我覺得這對於這么簡單的事情來說太亂了。

  • 最后,與第一個一樣,如果您沒有帶有id的片段,則可以在活動中實例化片段,保存引用,並在執行活動的onActivityResult時向其發送消息。

我希望這對你有所幫助。

這將幫助您在片段中使用onActivityResult

PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
startActivityForResult(builder.build(getActivity()), PLACE_PICKER_REQUEST);

public void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode == PLACE_PICKER_REQUEST) {
            if (resultCode == Activity.RESULT_OK) {
                Place place = PlacePicker.getPlace(data, getActivity());
             }
         }
}

暫無
暫無

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

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