从片段中返回结果,就像活动中的startActivityForResult一样

时间:2019-03-14 15:25:04

标签: java android android-fragments child-fragment

我有一个要添加片段的活动。有一个Fragment(WhenFragment),上面要添加另一个片段(DateSelectionFragment)以获取日期,当我回按时,我需要该日期并想在文本中设置view。我为此使用了OnFragmentInteractionListener,它可以正确返回WhenFragment的结果。但是我无法在该OnFragmentInteractionListener实现中访问Textview来为其设置日期。

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

返回到我正在使用的WhenFragment

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

它给出了nullPointerException。我们非常感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

请参阅有关如何使用接口进行片段之间通信的文档:https://developer.android.com/training/basics/fragments/communicating

此外,如果您在片段/活动中使用ViewModels,this教程可能会有所帮助。 (您可以使用活动的ViewModel在片段之间传输数据)

答案 1 :(得分:0)

尝试如下更改后退功能:-

 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();          
}
}

一些有用的链接:-

back stack behaviour with nested fragments

Sending data from nested fragments to parent fragment

答案 2 :(得分:-1)

您可以将值存储在sharedPreferences中,然后稍后从其他位置获取。