[英]How to use StartActivityForResult for fragments?
目前,我在項目中使用片段。 但是,僅對於搜索屏幕,我正在使用單獨的“活動”。 我正在嘗試將該活動轉換為片段。 我的問題是我現在從片段中調用搜索活動
private void callLocationSearch() {
Intent intent = new Intent(activity, SearchDataFilterActivity.class);
intent.putExtra(Constants.RECEIVE_INTENT_DATA, activity.getResources().getString(R.string.location));
startActivityForResult(intent, FOR_SEARCH_LOCATION);
}
在搜索屏幕中,我設置結果並發送到上一個屏幕。
setResult(Activity.RESULT_OK, returnIntent);
finish();
這樣,在onActivityResult
我得到結果並在搜索字段中進行設置。 我在此屏幕上有多個字段。 因此,我從搜索活動中搜索並設置了該片段。 現在,我將“搜索”活動更改為“片段”。 問題是我無法執行setResult並發送回片段。 我只能創建另一個片段並傳遞值。 這樣以前的值會越來越損失。 請讓我有任何想法解決我的問題。
我附上了屏幕截圖:
您應該使用偵聽器,在Fragment B中
private OnSomethingSelectedListener mListener;
// Container Activity must implement this interface
public interface OnSomethingSelectedListener {
public void onSearchComplete(Result object or more params);
}
片段A(或應接收信息的類)應實現FragmentB.OnSomethingSelectedListener和onSearchComplete方法。 在片段A或活動中(創建片段B時),您可以將實例(片段A或活動)傳遞給片段B構造函數,例如
FragmentB b = new FragmentB(this);
public FragmentB(OnSomethingSelectedListener listener) {
mListener = listener;
}
現在...在片段B中,而不是使用setResult
mListener.onSearchComplete(result);
這是一個簡單的偵聽器,它是進行片段通信的方式,您可以在此處了解更多信息
在片段中,您使用了“ getActivity()”
getActivity().setResult(Activity.RESULT_OK, returnIntent);
我想到了兩種方法:1.使用localbroadcast將值從片段B發送到片段A
2.搜索完成后,將值存儲在SharedPreferences上,並將其存儲在onResume中的fragment中。
選擇自己的方式 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.