FragmentHelper
package com.icitymobile.anda.util; import java.lang.ref.SoftReference;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry; import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction; import com.hualong.framework.log.Logger; /**
* Fragment帮助类
*/
public class FragmentHelper { public static final String TAG = "FragmentHelper"; private static final String STATE_IDS = "fragment_ids";
private static final String STATE_CURRENT_FRAGMENT_ID = "current_fragment_id";
private static final String STATE_LAST_FRAGMENT = "last_fragment"; private Context mContext;
private FragmentManager mManager;
private int mContainerId; private Map<String, SoftReference<Fragment>> mFragments = new HashMap<String, SoftReference<Fragment>>();
private String mCurrentFragmentId = null;
private Fragment mLastFragment; public FragmentHelper(Context context, FragmentManager manager, int containerId) {
mContext = context;
mManager = manager;
mContainerId = containerId;
} public Fragment getFragment(String fragmentId) {
Fragment fragment = null;
SoftReference<Fragment> reference = mFragments.get(fragmentId);
if (reference != null) {
fragment = reference.get();
}
return fragment;
} public String getCurrentFragmentId() {
return mCurrentFragmentId;
} public Fragment getCurrentFragment() {
return getFragment(getCurrentFragmentId());
} public void switchFragment(String id, Intent intent) {
switchFragment(id, intent, -);
} public void switchFragment(String id, Intent intent, int transition) {
if (intent == null) {
return;
}
Fragment newFragment = getFragment(id);
if (mLastFragment == null || mLastFragment != newFragment) {
FragmentTransaction ft = mManager.beginTransaction();
if (mLastFragment != null) {
ft.hide(mLastFragment);
}
if (newFragment == null) {
Logger.i(TAG, TAG + ": Instantiate a new fragment " + id);
String fname = intent.getComponent().getClassName();
Bundle args = intent.getExtras();
newFragment = Fragment.instantiate(mContext, fname);
if (args != null) {
newFragment.setArguments(args);
}
mFragments.put(id, new SoftReference<Fragment>(newFragment));
ft.add(mContainerId, newFragment, id);
} else {
Logger.i(TAG, TAG + ": Load an old fragment " + id);
ft.show(newFragment);
}
if (transition != -) {
ft.setTransition(transition);
}
mLastFragment = newFragment;
mCurrentFragmentId = id;
ft.commit();
// mManager.executePendingTransactions();
}
} /**
* 在Bundle中保存状态
*
* @param bundle
*/
public void saveInBundle(Bundle bundle) {
if (bundle == null) {
return;
}
Logger.i(TAG, TAG + ": saving in bundle");
ArrayList<String> idList = new ArrayList<String>(mFragments.keySet());
bundle.putStringArrayList(STATE_IDS, idList); Iterator<Entry<String, SoftReference<Fragment>>> iter = mFragments.entrySet().iterator();
Entry<String, SoftReference<Fragment>> entry;
SoftReference<Fragment> reference;
Fragment fragment;
while (iter.hasNext()) {
entry = iter.next();
reference = entry.getValue();
if (reference != null) {
fragment = reference.get();
if (fragment != null) {
mManager.putFragment(bundle, entry.getKey(), fragment);
}
}
} if (mCurrentFragmentId != null) {
bundle.putString(STATE_CURRENT_FRAGMENT_ID, mCurrentFragmentId);
} if (mLastFragment != null) {
mManager.putFragment(bundle, STATE_LAST_FRAGMENT, mLastFragment);
}
} /**
* 在Bundle中保存状态,只保存当前的fragment
*
* @param bundle
*/
public void saveStateSimple(Bundle bundle) {
if (bundle == null) {
return;
}
Logger.i(TAG, TAG + ": saving in bundle simple"); if (mCurrentFragmentId != null) {
bundle.putString(STATE_CURRENT_FRAGMENT_ID, mCurrentFragmentId); ArrayList<String> idList = new ArrayList<String>();
idList.add(mCurrentFragmentId);
bundle.putStringArrayList(STATE_IDS, idList); Fragment currentFragment = getCurrentFragment();
if (currentFragment != null) {
mManager.putFragment(bundle, mCurrentFragmentId, currentFragment);
}
} if (mLastFragment != null) {
mManager.putFragment(bundle, STATE_LAST_FRAGMENT, mLastFragment);
}
} /**
* 从Bundle中恢复状态
*
* @param bundle
*/
public void restoreFromBundle(Bundle bundle) {
if (bundle == null) {
return;
}
Logger.i(TAG, TAG + ": restoring from bundle");
ArrayList<String> idList = bundle.getStringArrayList(STATE_IDS);
if (idList != null) {
Fragment fragment;
for (String id : idList) {
fragment = mManager.getFragment(bundle, id);
if (fragment != null) {
mFragments.put(id, new SoftReference<Fragment>(fragment));
}
}
} String currentId = bundle.getString(STATE_CURRENT_FRAGMENT_ID);
if (currentId != null) {
mCurrentFragmentId = currentId;
} Fragment lastFragment = mManager.getFragment(bundle, STATE_LAST_FRAGMENT);
if (lastFragment != null) {
mLastFragment = lastFragment;
}
}
}
FragmentHelper的更多相关文章
- activiti获取可回退的节点
在处理流程回退时,需要获取某个节点当前可以回退到的节点,简单分析下: 1. 只支持回退到userTask. 2. 如果流程流转过某节点时生成了多个任务,从其中某一个任务回退到该节点后,不处理另外的任务 ...
随机推荐
- Linux下查看nginx安装目录
输入命令行: ps -ef | grep nginx master process后边的目录即是.
- .NET Core Preview
.NET Core Preview 这是很容易上手使用.NET Core在您选择的平台上. 你只需要一个命令行,一个文本编辑器和10分钟的时间. 原文链接:https://www.microsoft. ...
- JVM内存监控工具 Jconsole
-------------Jconsole监视远程的linux服务器上的tomcat ----------------------------- 1.linux服务器上的tomcat 的bin/cat ...
- 使用liunx部署的心得
安装SSH. 输入IP,输入用户名,点击连接,再输入密码. 如果采用的tomcat容器,则: 第一步: 查看正在运行的tomcat ps aux|grep tomcat 如果输出信息很长代表启动了的, ...
- View的3种测量模式
EXACTLY:表示设置了精确的值,一般当childView设置其宽.高为精确值.match_parent时,ViewGroup会将其设置为EXACTLY: AT_MOST:表示子布局被限制在一个最大 ...
- 剑指Offer 二维数组中的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路法一: * 矩阵是 ...
- BZOJ 3827: [Poi2014]Around the world
Sol 并查集. 一个点所能到达的最远是单调不降的.然后将链延长到两倍,预处理出每个点到达的最远点,然后倒着计算深度. 再然后一直跳,跳到>=x+n的点,因为跳到的点都能到最终的点,并且不影响后 ...
- windows下的getopt/getoptlong函数
windows下的getopt/getoptlong函数 getopt/getopt_long函数是GNU C中的函数,在linux编程中很常用到.这里就不介绍了. windows下没有找到类似的函数 ...
- webpack的最简单应用,只使用js与css的打包
首先进行全局安装webpack npm install -g webpack cmd跳转到项目的文件夹,安装webpack npm install --save-dev webpack 接着需要pac ...
- django初始
创建django工程 django-admin startproject [工程名称] mysite - mysite # 对整个程序进行配置 - init - settings # 配置文件 - u ...