Last active
January 17, 2017 11:29
-
-
Save kkuivi/161f254374a4007ae6014f67ae45789e to your computer and use it in GitHub Desktop.
Reference Map: Simple and Fast way to pass objects between Activities and Fragments
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.content.Context; | |
import android.support.v4.app.Fragment; | |
import java.util.HashMap; | |
/** | |
* Created by ekuivi on 8/24/16. | |
* | |
* Singleton object that makes it easy to pass object references between activities | |
*/ | |
public class ReferenceMap { | |
public class ReferenceList { | |
private HashMap<String, Object> mReferenceList; | |
private ReferenceList(){ | |
mReferenceList = new HashMap<String, Object>(); | |
} | |
public void put(String key, Object object){ | |
mReferenceList.put(key, object); | |
} | |
public Object get(String key){ | |
if(!mReferenceList.containsKey(key)) | |
return null; | |
return mReferenceList.get(key); | |
} | |
} | |
private HashMap<String, ReferenceList> mRefListMap; | |
private static ReferenceMap mSingleInstance = null; | |
ReferenceMap(){ | |
mRefListMap = new HashMap<String, ReferenceList>(); | |
} | |
public static ReferenceMap getInstance(){ | |
if(mSingleInstance == null) | |
mSingleInstance = new ReferenceMap(); | |
return mSingleInstance; | |
} | |
private String getActivityNameFrom(Context context){ | |
return context.getClass().getCanonicalName(); | |
} | |
private String getFragmentNameFrom(Fragment fragment){ | |
return fragment.getClass().getCanonicalName(); | |
} | |
private String getActivityNameFrom(Class activity){ | |
return activity.getCanonicalName(); | |
} | |
public ReferenceList getReferenceList(Context context){ | |
String activityName = getActivityNameFrom(context); | |
if(!mRefListMap.containsKey(activityName)) | |
return null; | |
return mRefListMap.get(activityName); | |
} | |
public ReferenceList getReferenceList(Fragment fragment){ | |
String fragmentName = getFragmentNameFrom(fragment); | |
if(!mRefListMap.containsKey(fragmentName)) | |
return null; | |
return mRefListMap.get(fragmentName); | |
} | |
private void createActivityRefList(String activityName){ | |
mRefListMap.put(activityName, new ReferenceList()); | |
} | |
public void putObjectReference(Class activity, String objectKey, Object object){ | |
String activtyName = getActivityNameFrom(activity); | |
if(!mRefListMap.containsKey(activtyName)) | |
createActivityRefList(activtyName); | |
ReferenceList referenceList = mRefListMap.get(activtyName); | |
referenceList.put(objectKey, object); | |
} | |
public void releaseRefList(Context context){ | |
String activityName = getActivityNameFrom(context); | |
if(mRefListMap.containsKey(activityName)) | |
mRefListMap.remove(activityName); | |
} | |
public void releaseRefList(Fragment fragment){ | |
String fragmentName = getFragmentNameFrom(fragment); | |
if(mRefListMap.containsKey(fragmentName)) | |
mRefListMap.remove(fragmentName); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Reference Map provides a simple and fast way to pass objects between Activities and Fragments for Android.
For example, to pass a Person object called myPerson to a sample Activity called MyActivity:
ReferenceMap.getInstance().putObjectReference(MyActivity.class, "myKey", myPerson);
To get the object in MyActivity:
ReferenceMap.ReferenceList refList = ReferenceMap.getInstance().getReferenceList(this);
Person person = (Person) refList.get("myKey");
Finally, to prevent against memory leaks, you need to release the ReferenceList in your Activity's onStop() method:
public void onStop(){
ReferenceMap.getInstance().releaseRefList(this);
super.onStop();
}
This process is similar for fragments as well.