簡體   English   中英

如何將StartActivityForResult用於片段?

[英]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.

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