[英]getActivity().startActivityForResult() is not working in fragments
[英]startActivityForResult() vs getActivity().startActivityForResult() in Android Fragment
Android Fragment中startActivityForResult()
與getActivity().startActivityForResult()
之間的區別是什么? 在Fragment中調用onActivityForResult()
時的行為差異是什么?
startActivityForResult()
必須從fragment
的onActivityForResult()
處理它
getActivity().startActivityForResult()
必須從activity
的onActivityForResult()
處理它
基本上:
如果您在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.