2016-07-26 15 views
0

Ich versuche Icepick Bibliothek in unserer Anwendung zu verwenden, um Bündel auf Telefon Rotation zu speichern und wiederherzustellen, aber die Bibliothek Dokumentation finde ich keine guten Tipps zu speichern und Klassen, die von @Parcel Annotation implementiert ist diese einfache Klasse, die i o der SeiteAndroid verwenden Icepick Bibliothek zum Speichern/Wiederherstellen Bundle

Example Klasse gefunden:

@Parcel 
public class Example { 
    String name; 
    int age; 

    public Example(){ /*Required empty bean constructor*/ } 

    public Example(int age, String name) { 
     this.age = age; 
     this.name = name; 
    } 

    public String getName() { return name; } 
    public int getAge() { return age; } 

    public String setName(String name) { this.name = name; } 
    public int setAge(int age) { this.age = age; } 
} 

ExampleBundler Klasse:

public class ExampleBundler implements Bundler<Object> { 
    @Override 
    public void put(String s, Object example, Bundle bundle) { 
     bundle.putParcelable(s, Parcels.wrap(example)); 
    } 

    @Override 
    public Object get(String s, Bundle bundle) { 
     return Parcels.unwrap(bundle.getParcelable(s)); 
    } 
} 

Ok, jetzt wie kann ich das auf Activity verwenden?

dies ist mein einfacher Code, ich versuche

public class MainActivity extends BaseActivity { 

    /* @State(ExampleBundler.class) String message; */ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Example example = new Example(); 
    example.setName = "HELLO WORLD"; 
    example.setAge = 99; 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
    } 

    public void onRestoreInstanceState(Bundle inState) { 
    } 
} 

könnte man meinen Code zu speichern und wiederherzustellen beheben? Vielen vorzurücken

+0

Sie müssen auch 'Icepick.restoreInstanceState nennen (this, savedInstanceState)' in onCreate und 'Icepick.saveInstanceState (this, outstate)' in der onSaveInstanceState –

+0

@SahithReddy und wie kann ich fox diese Zeile: '@State (ExampleBundler.class) String-Nachricht;' –

+0

Wenn es nur eine Zeichenfolge ist, brauchen Sie nicht einmal den benutzerdefinierten Bundler können Sie einfach @State verwenden. Custom Bundler ist, wenn Sie ein ganzes Objekt in Verbindung mit Parcelable –

Antwort

2

Um Ihren Code zu beheben, hat die Bündler die Beispielklasse nicht die allgemeine Objektklasse so

ändern zu implementieren
public class ExampleBundler implements Bundler<Object> { 
    @Override 
    public void put(String s, Object example, Bundle bundle) { 
     bundle.putParcelable(s, Parcels.wrap(example)); 
    } 

    @Override 
    public Object get(String s, Bundle bundle) { 
     return Parcels.unwrap(bundle.getParcelable(s)); 
    } 
} 

dieser

public class ExampleBundler implements Bundler<Example> { 
    @Override 
    public void put(String s, Example example, Bundle bundle) { 
     bundle.putParcelable(s, Parcels.wrap(example)); 
    } 

    @Override 
    public Example get(String s, Bundle bundle) { 
     return Parcels.unwrap(bundle.getParcelable(s)); 
    } 
} 

Dann müssen Sie hinzufügen @State(ExampleBundler.class) Example example; an die Spitze Ihrer Aktivität. In Ihrem onCreate hinzufügen Icepick.restoreInstanceState(this, savedInstanceState) und in Ihrem onSavedInstanceState hinzufügen Icepick.saveInstanceState(this,outstate)

Icepick documentation und parceler