Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@kkuivi
Last active January 17, 2017 11:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kkuivi/161f254374a4007ae6014f67ae45789e to your computer and use it in GitHub Desktop.
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
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);
}
}
@kkuivi
Copy link
Author

kkuivi commented Dec 14, 2016

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment