关闭

解决Fragment重叠问题

455人阅读 评论(0) 收藏 举报
分类:

用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。






1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:88563次
    • 积分:1875
    • 等级:
    • 排名:千里之外
    • 原创:102篇
    • 转载:20篇
    • 译文:0篇
    • 评论:101条
    最新评论