package com.mogoo.launcher2.utils; import java.util.HashMap; import java.util.Iterator; import android.app.Activity; import android.content.Context; import android.view.View; /** * 获得已注册view的总线类 * @author huangyue * */ public class Mogoo_ComponentBus { private static Mogoo_ComponentBus cBus; private final HashMap<Context, HashMap<Integer, View>> viewContext; private Mogoo_ComponentBus(){ viewContext = new HashMap<Context, HashMap<Integer,View>>(); } /** * * 获得Bus实例 * @ author: 黄悦 *@return */ public static Mogoo_ComponentBus getInstance(){ if(cBus == null){ cBus = new Mogoo_ComponentBus(); } return cBus; } /** * 注册view到总线缓存中 * @author huangyue * @param layoutId * @param view * @param context */ public void addActivityComp(int resId, View view, Context context){ initViewMap(context); viewContext.get(context).put(resId, view); } /** * 由id 和 Activity 获得所需组建view * @author huangyue * @param resId * @param context * @return View */ public View getActivityComp(int resId, Context context){ HashMap<Integer, View> temp = getViewMap(context); if(temp != null && temp.containsKey(resId)){ try{ return temp.get(resId); }finally{ temp = null; } } return null; } /** * 清理所有的已注册view * @author huangyue */ public void clearAll(){ Iterator<Context> itr = viewContext.keySet().iterator(); while(itr.hasNext()){ clear(itr.next()); } viewContext.clear(); cBus = null; } /** * 清理当前activity相关的引用 * @author huangyue * @param context */ public void clear(Context context){ if(context == null){ return; } HashMap<Integer, View> temp = viewContext.remove(context); if(temp == null){ return; } Iterator<View> viewIterator = temp.values().iterator(); View tempView = null; while(viewIterator.hasNext()){ tempView = viewIterator.next(); if(tempView != null && tempView instanceof Mogoo_ClearBase){ ((Mogoo_ClearBase)tempView).onClear(); } } temp.clear(); temp = null; } private HashMap<Integer, View> getViewMap(Context context){ if(!viewContext.containsKey(context)){ return null; } return viewContext.get(context); } /* * 新增view时初始化map */ private void initViewMap(Context context){ if(!viewContext.containsKey(context)){ viewContext.put(context, new HashMap<Integer, View>()); } } }