Icepick被打破了吗?

时间:2015-07-20 10:27:36

标签: android android-gradle android-library

我尝试过一些非常简单的片段测试。但是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);
   }

我错过了什么?

3 个答案:

答案 0 :(得分:7)

在您的build.gradle文件中,此行provided 'frankiesardo:icepick-processor:3.0.0'provided更改为apt。这应该可以解决问题。

来源:https://github.com/frankiesardo/icepick/issues/56

答案 1 :(得分:4)

好吧,我真的开始在5分钟前看看IcePick图书馆,所以如果这是一个愚蠢的回答请记住:)

截至此提交https://github.com/frankiesardo/icepick/commit/f60b4b9c0307be208178381661ee13b958eda531 看起来应该使用@State而不是@Icicle。这会解决您的问题吗?

答案 2 :(得分:0)

把你的

Icepick.restoreInstanceState(this, savedInstanceState);
<{1>}中的

(而不是onCreateView()