楠之枫雪的博客

思想决定高度

解决Fragment重叠问题

用add 、hide、show的方式将fragment添加到栈里面,这样显示的时候就不需要重新创建一个fragment,比较好的保存了fragment的当前的状态,可是在一键清理后回到界面发现会出现重叠的情况,解决的方法是移除栈里面存在的fragment,这样就可以去掉重叠是现象了,可是一键清理后,可能一下整个应用需要到的有用数据被清理掉了,整个应用去捕捉的话有点啰嗦,而且与用于的意图相冲突,所以解决的建议是:移除栈,如何重新启动应用。


添加fragment的方法:

/**
	 * 切换fragment 
	 * @param from     前一个Fragment 
	 * @param to       后一个Fragment          
	 */
	public void switchContent(Fragment from, Fragment to) {	
		if (from != to) {		
				mTransaction = mManager.beginTransaction();
				if (!to.isAdded()) {
					mTransaction.hide(from).add(R.id.main_fragment_layout, to,TAG[mChecknum]);

				} else
					mTransaction.hide(from).show(to);				 
				mTransaction.commit();
			}
		
	}



重新启动的方法:

private void restartApplication() {
		//重启前把栈里面的fragment全部清除掉,否则会出现重叠的现象		
		mTransaction = mManager.beginTransaction();
		for(int i = 0;i<=6;i++){
			Fragment cashefra=getFragmengCashe(TAG[i]);
			if(cashefra!=null){
				mTransaction.remove(cashefra);
			}			
		}			
		mTransaction.commit();
		Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName());		
		intent.setClass(MainActivity.this, MainActivity.class);		
		startActivity(intent);
		this.finish();				
	}


记得保存状态:

@Override  
	public void onCreate(Bundle savedInstanceState) {	
		
		
		
		super.onCreate(savedInstanceState);
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		
		
		setContentView(R.layout.activity_main);		
		
		if (savedInstanceState != null) {			       			
			 restartApplication();	//不保存状态,只要内存清空就会重启				
					
		}	 
		
		inite();	
		
	  
	}
	
	@Override
	protected void onSaveInstanceState(Bundle outState) {
		outState.putInt("FRAMENT_TAG", mChecknum);
		super.onSaveInstanceState(outState);
	}


注意:重启的话,Mainactivity的启动模式应该是standard。






阅读更多
版权声明:本文为楠之枫雪的原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014614038/article/details/49944831
个人分类: android 开发代码库
上一篇了解ActivityThread
下一篇canvas的一些有用的使用小结
想对作者说点什么? 我来说一句

FragmentDemo

2016年05月26日 2.14MB 下载

没有更多推荐了,返回首页

关闭
关闭