簡體   English   中英

從不同片段獲取對象的更改

[英]Getting Changes on object from different fragment

假設我們有兩個片段A和B,我們使用Bundle將一個對象O1從片段A發送到B,並將片段B放入當前活動中。對O1進行一些更改,即將數據存儲在有效負載對象O1中,現在回到放置保存按鈕的片段A。 現在,如果保存O1擁有的數據,即O1.savetoDatabase(),我們不會得到在片段B中所做的數據更改。是否有可能的方法來獲取傳遞給片段B的對象在片段A中的更改? (類似於引用會引起更改)

編輯:使用setTargetFragment的答案兩個似乎有效,但唯一的問題是當我在片段B上,然后將數據發送到片段A時,我正在接收片段A的對象O1中的數據(這很好),但是當我按下從片段B到片段A的返回按鈕,O1中的數據由於片段重新生成而丟失。 應該采取什么措施來保存發送的數據?

您可以使用setTargetFragment()。為您的對象創建getter和setter。

public class FragmentA extends Fragment {
    private String mName;

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        FragmentB fragmentB = new FragmentB();
        fragmentB.setTargetFragment(this, 1111);
    }

    public String getmName() {
        return mName;
    }

    public void setmName(String mName) {
        this.mName = mName;
    }
}

public class FragmentB  extends Fragment {
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        ((FragmentA)getTargetFragment()).setmName("xyz");
    }
}

或者,您可以使用onActivityResult方法通過如下所示的意圖將數據從fragmentB發送到FragmentA。

getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, intent)

使用Bundle將修改的O1發送到片段A。 或者您可以使用Eventbus觀察更改https://github.com/greenrobot/EventBus

建議在片段之間進行通信的方法是創建一個共享的ViewModel對象。 這兩個片段都可以通過其包含的Activity訪問ViewModel。 片段可以更新ViewModel中的數據,如果使用LiveData公開了數據,則只要從ViewModel觀察LiveData,新狀態就會被推送到另一個片段。 若要查看如何實現這種通信,請閱讀ViewModel指南中的“在片段之間共享數據”部分。

REF。 -https://developer.android.com/training/basics/fragments/communication

ViewModel是一個類,負責為Activity或Fragment准備和管理數據。 它還處理活動/片段與應用程序其余部分的通信(例如,調用業務邏輯類)。

始終與范圍(片段或活動)相關聯地創建ViewModel,只要范圍是活動的,ViewModel就會保留。 例如,如果它是一個活動,直到完成。

換句話說,這意味着如果ViewModel的所有者因配置更改(例如,旋轉)而被銷毀,則不會銷毀它。 所有者的新實例將重新連接到現有的ViewModel。

ViewModel的目的是獲取並保留活動或片段所需的信息。 活動或片段應能夠觀察ViewModel中的更改。 ViewModel通常通過LiveData或Android數據綁定公開此信息。 您還可以使用自己喜歡的框架中的任何可觀察性構造

REF。 -https://developer.android.com/reference/android/arch/lifecycle/ViewModel

也檢查一下

使用新的架構組件ViewModel在片段之間共享數據

希望這可以幫助

暫無
暫無

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

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