android - Storing list of position in sharedPreferences, and retrieve in another activity -


i want similar this, have used cardview recyclerview. added favourite button cardview below can see full code. in recyclerview adapter print toast per position , working fine, need save int value of position in shared preferences in arraylist , display arraylist in next intent.

this recyclerview adapter

public void onbindviewholder(nameviewholder holder, final int position) {     holder.textview.settext(names.get(position).textview);     holder.favourite.setonclicklistener(new view.onclicklistener() {         @override         public void onclick(view view) {             sharedpreferences sp = preferencemanager.getdefaultsharedpreferences(view.getcontext());             sharedpreferences.editor editor = sp.edit();             editor.putint("key", position);  //may or may not be.             //add code here save position in array             toast.maketext(view.getcontext(),"fav "+position,toast.length_short).show();         }     }); 

cardview.xml

<?xml version="1.0" encoding="utf-8"?>  <android.support.v7.widget.cardview xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/cardview" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="3dp" android:orientation="vertical" app:cardbackgroundcolor="@android:color/transparent" app:cardcornerradius="8dp" app:cardelevation="3dp" app:cardpreventcorneroverlap="false" app:cardusecompatpadding="true">  <textview     android:id="@+id/textview"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:paddingleft="20dp"     android:paddingtop="3dp"     android:textalignment="center"     android:textcolor="#ff9901"     android:textsize="35sp"     android:textstyle="italic" />  <relativelayout     android:layout_width="wrap_content"     android:layout_height="wrap_content">     <imagebutton         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_alignparentright="true"         android:id="@+id/favourite"         android:src="@drawable/star"         android:background="@android:color/transparent"         /> </relativelayout> </android.support.v7.widget.cardview> 

provide me getting arraylist prefrences , how use in listview too.

first of all, consider pass data in bundle through intent. if don't need store information after app closing, use way.

if want save data, through re-running app, sharedpreferences fine, here code, how can implement functionality. first let's write snippet helps restore items , update adapter them:

private static final string checked_items_ref = "checked_items"; private sharedpreferences sharedpreferences = getcontext().getsharedpreferences("mysharedprefs", mode_private);  private void restoreadapterstate(recyclerview.adapter adapter) {     set<string> savedcheckeditems = sharedpreferences.getstringset(checked_items_ref, new hashset<>());     list<integer> checkedpositions = converttocheckeditems(savedcheckeditems);     (integer position : checkedpositions) {         //update somehow info checked items, example in          //adapter can store set of checked positions , in         //onbindviewholder function check viewholder position         //contained in set         adapter.notifyitemchanged(position);     } }  private list<integer> converttocheckeditems(set<string> checkeditems) {     list<integer> result = new arraylist<>();     for(string itempositionstr : checkeditems) {         int position = integer.parseint(itempositionstr);         result.add(position);     }      return result; } 

note can follow advise in comment , restoreadapterstate modified:

private void restoreadapterstate(multicheckedadapter adapter) {     set<string> savedcheckeditems = sharedpreferences.getstringset(checked_items_ref, new hashset<>());     list<integer> checkedpositions = converttocheckeditems(savedcheckeditems);         adapter.setcheckedpositions(new hashset<integer>(checkedpositions)); } 

and in multycheckedadapter have like:

private set<integer> checkedpositions = new hashset<>();  public setcheckedpositions(set<integer> checkedpositions) {     this.checkedpositions = checkedpositions;     (integer position : checkedpositions) {         adapter.notifyitemchanged(position);     } }  ...  @override public void onbindviewholder(myholder holder, final int position) {     if (checkedpositions.contains(position)) {         //use 1 binding     } else {         //use binding     } }  ... 

then need change snippet:

private set<integer> checkedpositions = new hashset<>();  public void onbindviewholder(nameviewholder holder, final int position) {     holder.textview.settext(names.get(position).textview);     holder.favourite.setonclicklistener(new view.onclicklistener() {         @override         public void onclick(view view) {             //check somehow current item checked or not.             //for example store set of checked items in adapter             //let's declaration set<integer> checkeditems;             if (checkedpositions.contains(position)) {                 checkedpositions.remove(position);                 removecheckeditem(position);             } else {                 checkedpositions.add(position);                 savecheckeditem(position);             }         }     }); }  private void savecheckeditem(int position) {     set<string> savedcheckeditems = sharedpreferences.getstringset(checked_items_ref, new hashset<>());     string positionstr = string.valueof(position);     if (!savedcheckeditems.contains(positionstr)) {         savedcheckeditems.add(positionstr);         sharedpreferences.edit().putstringset(checked_items_ref, savedcheckeditems).apply();     } }  private void removecheckeditem(int position) {     set<string> savedcheckeditems = sharedpreferences.getstringset(checked_items_ref, new hashset<>());     string positionstr = string.valueof(position);     if (savedcheckeditems.contains(positionstr)) {         savedcheckeditems.remove(positionstr);         sharedpreferences.edit().putstringset(checked_items_ref, savedcheckeditems).apply();     } } 

Comments

Popular posts from this blog

mysql - Dreamhost PyCharm Django Python 3 Launching a Site -

java - Sending SMS with SMSLib and Web Services -

java - How to resolve The method toString() in the type Object is not applicable for the arguments (InputStream) -