簡體   English   中英

在 Activity 的情況下,從片段返回結果就像 startActivityForResult

[英]Return result from fragment just as startActivityForResult in case Activity

我有一個活動,我在其中添加片段。有一個片段(WhenFragment),我在其中添加另一個片段(DateSelectionFragment)來獲取日期,當我回按時,我需要該日期並希望在文本視圖中設置。我為此使用 OnFragmentInteractionListener 正確返回結果 WhenFragment。但我無法訪問該 OnFragmentInteractionListener 實現中的 Textview 以為其設置日期。

@Override
public void onFragmentInteraction(Bundle bundle) {
   mBinding.textView.setText(bundle.getString("result"),"");
}

回到我正在使用的 WhenFragment

 getActivity().onBackPressed();
 mListener.onFragmentInteraction(bundle);

它給出了 nullPointerException。 任何幫助都受到高度贊賞。

請參閱有關如何使用接口在片段之間進行通信的文檔: https : //developer.android.com/training/basics/fragments/communication

此外,如果您在片段/活動中使用ViewModel, 教程可能會有所幫助。 (您可以使用activity的ViewModel在片段之間傳輸數據)

嘗試按如下方式更改后退功能: -

 mListener.onFragmentInteraction(bundle);    
 getActivity().onBackPressed();

要么

如果您要使用getChildFragmentManager()添加第二個片段,則首先必須管理片段堆棧,而不是活動堆棧。類似於:-

 @Override
public void onBackPressed() {

// If the fragment exists and has some back-stack entry
if (mActivityDirectFragment != null && mActivityDirectFragment.getChildFragmentManager().getBackStackEntryCount() > 0){
    // Get the fragment fragment manager - and pop the backstack
    mActivityDirectFragment.getChildFragmentManager().popBackStack();
}
// Else, nothing in the direct fragment back stack
else{
    // Let super handle the back press
    super.onBackPressed();          
}
}

一些有用的鏈接: -

嵌套片段的后棧行為

將嵌套片段中的數據發送到父片段

您可以將值存儲在sharedPreferences中,然后從其他地方獲取它。

暫無
暫無

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

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