簡體   English   中英

Android片段中的startActivityForResult()vs getActivity()。startActivityForResult()

[英]startActivityForResult() vs getActivity().startActivityForResult() in Android Fragment

Android Fragment中startActivityForResult()getActivity().startActivityForResult()之間的區別是什么? 在Fragment中調用onActivityForResult()時的行為差異是什么?

startActivityForResult()必須從fragmentonActivityForResult()處理它

getActivity().startActivityForResult()必須從activityonActivityForResult()處理它

基本上:

如果您在fragment並且想要處理fragment上的結果,請使用onActivityForResult() ,否則如果要從片段的activity處理它,請使用getActivity.startActivityForResult()

startActivityForResult來自片段調用其容器Activity的startActivityForResult 片段: -

從包含Activity的片段中調用startActivityForResult(Intent,int)。

而當你直接在片段中使用它時,可以對請求代碼進行一些特定的更改。你將在onActivityresult()中獲得修改后的請求代碼,因為我最近遇到了修改后的請求代碼的一些問題。 你可以看看這個線程

我們可以在Activity中使用startActivityForResult()在Fragment中使用getActivity().startActivityForResult()

Inshort,為了獲得Activity of Context,我們在其中使用getActiviy()

相反,我們可以從Actiivty調用特定片段的onActivityResult(),如下所示:

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

如果我們把更多的細節,那么,

如果您將從Fragment調用startActivityForResult() ,則requestCode將由擁有Fragment的Activity更改。

因此,如果您想在活動中獲得正確的resultCode,可以嘗試如下:

不要使用:(在這種情況下):

startActivityForResult(intent, 1);

采用 :

getActivity().startActivityForResult(intent, 1);

希望能幫助到你..!

完全沒有區別...但是有點不同的是getActivity()。startActivityForResult()只能從一個片段調用:)

您必須參考Activity進行調用,因為startActivityForResult(Intent intent, int requestCode)是在Activity指定的方法。

因此,如果您從YourActivity調用,它已經有一個Activity的引用,如:

YourActivity extends AppCompatActivity (which is subclass of `Activity`)

但是如果你從YourFragment調用它,你需要指定Activity引用,在這種情況下,它將是包含YourFragment的Activity; 因此我們使用getActivity()然后觸發startActivityForResult()

“startActivityForResult()”適用於Activity類。 當您在Activity類中時,您可以直接使用此方法。 當你處於片段中時,因為片段在Activity上創建,你應該首先獲得基於它的片段活動。 手段:

//in fragment class:
Activity activity = this.getActivity();

現在你有了活動,我說,你可以對你從片段中獲得的活動使用“startActivityForResult()”。

activity.startActivityForResult();

希望有所幫助

暫無
暫無

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

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