我有一个包含多个片段的容器。
我尝试在第一个片段中实现以下内容,然后使用第二个片段中的Bundle发送回数据。
@Override
public void onFragmentResult(int requestCode, int resultCode, Bundle data) {
super.onFragmentResult(requestCode, resultCode, data);
if (requestCode == REQ_MODIFY_FRAGMENT && resultCode == RESULT_OK && data != null) {
mTitle = data.getString(KEY_RESULT_TITLE);
mToolbar.setTitle(mTitle);
getArguments().putString(ARG_TITLE, mTitle);
Toast.makeText(_mActivity, R.string.modify_title, Toast.LENGTH_SHORT).show();
}
}
但是,当我转到第三个片段(它们都按顺序排列)并且退出应用程序时(例如,向日历添加事件或从坐标加载Google地图),应用程序会连续失败包裹错误。我已经检查了所有对象和包裹,但都不是不正确的。
一旦我从片段1中删除了onFragmentResult,该应用程序就会停止崩溃。我花了好几个小时,但仍无法解决。有帮助的人吗?
这是我的Logcat的一些输出
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1579)
at android.os.Bundle.writeToParcel(Bundle.java:1233)
at android.os.Parcel.writeBundle(Parcel.java:931)
read: unexpected EOF!
以上输出重复了几十次,并以EOF结尾!
答案 0 :(得分:0)
我终于找到答案了。在第二个片段中,我正在设置setFragmentResult onCreateView,每次我离开应用程序并返回到它时都会导致失败。我通过将代码移到片段的后退按钮中来解决此问题,如下所示:
@Override
public boolean onBackPressedSupport() {
Bundle bundle = new Bundle();
bundle.putBoolean("data_refreshed", true);
setFragmentResult(RESULT_OK, bundle);
Toast.makeText(_mActivity, "onBackPressedSupport-->return false, " + getString(R.string.upper_process), Toast.LENGTH_SHORT).show();
return false;
}
onBackPressedSupport是我在自己的工具栏上创建的自定义函数。感谢Blink Kai,让我不断前进。
更新:我知道在片段的onDestroyView中实现了此功能。比编写我自己的自定义函数容易得多:
@Override
public void onDestroyView() {
super.onDestroyView();
Bundle bundle = new Bundle();
bundle.putBoolean("data_refreshed", true);
setFragmentResult(RESULT_OK, bundle);
}