icepick

by frankiesardo

frankiesardo / icepick

Android Instance State made easy

3.8K Stars 218 Forks Last release: over 5 years ago (v3.1.0) Eclipse Public License 1.0 253 Commits 13 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

Icepick

Icepick is an Android library that eliminates the boilerplate of saving and restoring instance state. It uses annotation processing to generate code that does bundle manipulation and key generation, so that you don't have to write it yourself.

class ExampleActivity extends Activity {
  @State String username; // This will be automatically saved and restored

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Icepick.restoreInstanceState(this, savedInstanceState); }

@Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Icepick.saveInstanceState(this, outState); }

// You can put the calls to Icepick into a BaseActivity // All Activities extending BaseActivity automatically have state saved/restored }

It works for

Activities
,
Fragments
or any object that needs to serialize its state on a
Bundle
(e.g. mortar's ViewPresenters)

Icepick can also generate the instance state code for custom Views:

class CustomView extends View {
  @State int selectedPosition; // This will be automatically saved and restored

@Override public Parcelable onSaveInstanceState() { return Icepick.saveInstanceState(this, super.onSaveInstanceState()); }

@Override public void onRestoreInstanceState(Parcelable state) { super.onRestoreInstanceState(Icepick.restoreInstanceState(this, state)); }

// You can put the calls to Icepick into a BaseCustomView and inherit from it // All Views extending this CustomView automatically have state saved/restored }

Custom Bundler

From version

3.2.0
you can supply a class parameter to the
State
annotation. This class should implement the
Bundler
interface and you can use it to provide custom serialisation and deserialisation for your types.
class MyFragment {
  @State(MyCustomBundler.class) MyCustomType myCustomType;
}

class MyCustomBundler implements Bundler { void put(String key, MyCustomType value, Bundle bundle) { ... }

MyCustomType get(String key, Bundle bundle) { ... } }

This is useful if you want to use

icepick
in conjunction with
Parceler
.

Proguard

If Proguard is enabled make sure you add these rules to your configuration:

-dontwarn icepick.**
-keep class icepick.** { *; }
-keep class **$$Icepick { *; }
-keepclasseswithmembernames class * {
    @icepick.* ;
}
-keepnames class * { @icepick.State *;}

Download

Icepick needs two libraries:

icepick
and
icepick-processor
.

Clojars Project

Clojars Project

Gradle:

repositories {
  maven {url "https://clojars.org/repo/"}
}
dependencies {
  compile 'frankiesardo:icepick:{{latest-version}}'
  provided 'frankiesardo:icepick-processor:{{latest-version}}'
}

Maven:

  
    clojars
    https://clojars.org/repo/
    
      true
    
    
      true
    
  


  
    frankiesardo
    icepick
    {{latest-version}}
  
  
    frankiesardo
    icepick-processor
    {{latest-version}}
    true
  

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.