Last active
January 17, 2017 15:09
-
-
Save kkuivi/d49d7d832013b2b15e28cf20706a013a to your computer and use it in GitHub Desktop.
ReferenceMap- Datastructure that makes it possible to pass objects between activities for Android development.
This file contains 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
package com.goeshow.barcodescanner.utils.objectReferenceMap; | |
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 releaseActivityRefList(Context context){ | |
String activityName = getActivityNameFrom(context); | |
if(mRefListMap.containsKey(activityName)) | |
mRefListMap.remove(activityName); | |
} | |
public void releaseFragmentRefList(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
Thanks, changed getSimpleName() to getCanonicalName(). This should solve the problem explained above. New version here (https://gist.github.com/kkuivi/161f254374a4007ae6014f67ae45789e)