我尝试过一些非常简单的片段测试。但是Icepick似乎没有在outState包中保存String test的值......
<div>
我的gradle构建如下:
\n
注意,我尝试了最新版本的Icepick 3.0.2和3.0.3-SNAPSHOT,它们都没有用,所以我想使用早期版本的结果相同。
还有:
public class MyFragment extends Fragment {
@Icicle String test;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Icepick.restoreInstanceState(this,savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_settings, container, false);
Log.d(TAG,"restored value of test="+test);
return view;
}
@Override
public void onSaveInstanceState(Bundle outState) {
test="I have a value";
super.onSaveInstanceState(outState);
Icepick.saveInstanceState(this,outState);
Log.d(TAG, "test="+test);
}
我错过了什么?
答案 0 :(得分:7)
在您的build.gradle文件中,此行provided 'frankiesardo:icepick-processor:3.0.0'
将provided
更改为apt
。这应该可以解决问题。
答案 1 :(得分:4)
好吧,我真的开始在5分钟前看看IcePick图书馆,所以如果这是一个愚蠢的回答请记住:)
截至此提交https://github.com/frankiesardo/icepick/commit/f60b4b9c0307be208178381661ee13b958eda531 看起来应该使用@State而不是@Icicle。这会解决您的问题吗?
答案 2 :(得分:0)
把你的
Icepick.restoreInstanceState(this, savedInstanceState);
<{1>}中的(而不是onCreateView()
)