[英]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做findFragmentById
在onActivityResult
活動的,如果碎片不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.