在我的Activity
内,我正在使用Fragment
并将标志retainInstance
设置为true的var retainedFragment = supportFragmentManager.findFragmentByTag(retainedTag)
if (retainedFragment == null) {
retainedFragment = BaseRetainedFragment<P>()
supportFragmentManager.beginTransaction()
.add(retainedFragment, retainedTag).commit()
presenter = getPresenter()
retainedFragment.setPresenter(presenter)
fragment = retainedFragment
} else {
presenter = (fragment as BaseRetainedFragment<P>).getPresenter()
}
来保存我的表示层类的实例。它可以很好地抵抗旋转变化。
Fragment
*在lateinit
内部,我拥有presenter
属性Activity
问题在于,当涉及到Android在后台杀死Fragment
时,因为如您所见,我正在检查是否实际上有我的Fragment
的实例。重新启动应用程序后,该进程在后台被Android杀死后,它将找到带有该标签的Fragment
,但不会初始化我的属性(该属性已清除)。
我可以通过将savedInstanceState
存储在Activity
内的Presenter
中来摆脱崩溃,但是仍然无法获取以前的Parcelable
实例。我无法为自己的Presenter
实现Fragment
并将其实例保存在Parcelable
中。
是否有一种方法可以从保留的片段中还原类的实例?甚至是带有状态的物体?
注意:我试图将状态仅保存为Type inference fail
,但是在尝试获取savedInstanceState.getParcelable(key)
时,我一直都在获取activity
。
感谢任何其他在后台$(document).ready(function() {
$(".my_link").click(
function() {
console.log("requesting");
$.ajax({
url: 'https://www.gigablast.com/search?q=hello',
type: 'GET',
async: false,
cache: false,
timeout: 30000,
beforeSend: function() {
$('#response').text('Loading...');
},
error: function() {
return true;
},
success: function(msg) {
console.log(msg);
}
});
});
});
被杀死时保持状态的命题
答案 0 :(得分:0)
我决定将ViewState
中的最后一个Bundle
保存在retained fragment
内。效果不错,但当然也有缺点-我必须在我的每个@Parcelize
类中添加ViewState
,而且当您在其中包含更多指定类型时,它也会变得越来越难(需要自定义{{1} }实施。
因此,现在我正在创建Parceler
的新实例,但立即推送初始化Presenter
,这是我上一个实例。