Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Fragment 切換多個界面 重疊問題 隱藏問題

Android Fragment 切換多個界面 重疊問題 隱藏問題

編輯:關於Android編程

接上一篇的博文:Android fragment 切換加載數據卡頓問題,想到的辦法就是把切換之前的fragmenthide隱藏起來,就可以解決卡頓的問題,不用重新new一個fragment。由於左側懸浮菜單有差不多10多個菜單,如果每一個菜單切換的時候,都要隱藏其余所有的菜單,那就會導致代碼十分的臃腫,以前隱藏的代碼是這樣的:

 

				/*if (!openPositionFragment.isAdded()) { // 先判斷是否被add過
					transaction.hide(priceFragment)
							.add(R.id.fragment_container, openPositionFragment)
							.commit(); // 隱藏當前的fragment,add下一個到Activity中
					titleView.setText(openPositionFragment.getFragmentTitle());
				} else {
					transaction.hide(priceFragment).show(openPositionFragment)
							.commit(); // 隱藏當前的fragment,顯示下一個
					titleView.setText(openPositionFragment.getFragmentTitle());
				}*/

每一個菜單按鈕下的點擊事件,都要寫一段這樣的代碼,而且局限是只能隱藏一個,導致切換的時候有重疊問題,無法正確顯示。

 

解決的方案是:

先隱藏所有的fragment,然後進入點擊事件,如果該fragment已經實例化,那就show就好,如果沒有還未實例化,那就先new一個,然後show,最後一定記得commit,我就是由於沒寫這句代碼導致空指針異常。還有一點注意的是必須先實例化你第一個進入的fragment。修改之後的代碼如下:

 

private void initOpenMenuItem(View popupWindow_view) {
		DrawableCenterTextView menu_price = (DrawableCenterTextView) popupWindow_view
				.findViewById(R.id.menu_price);

		menu_price.setOnClickListener(new OnClickListener() {
			FragmentTransaction transaction;

			@Override
			public void onClick(View v) {
				progressDialog.show();
				
				transaction = manager.beginTransaction();
				hideFragments(transaction);
				/*
				 * qiulinhe:2015年7月21日10:54:51 解決切換卡頓的問題
				 */

				if (priceFragment == null) {  
	                // 如果MessageFragment為空,則創建一個並添加到界面上  
					priceFragment = new PriceFragment();  
	                transaction.add(R.id.fragment_container, priceFragment);  
	                titleView.setText(priceFragment.getFragmentTitle());
	            } else {  
	                // 如果MessageFragment不為空,則直接將它顯示出來  
	                transaction.show(priceFragment); 
	                titleView.setText(priceFragment.getFragmentTitle());
	            }

				transaction.commit();
				popupWindow.dismiss();
				progressDialog.dismiss();
			}
		});

	}

	/** 
     * 將所有的Fragment都置為隱藏狀態。 
     *  
     * @param transaction 
     *            用於對Fragment執行操作的事務 
     */  
    private void hideFragments(FragmentTransaction transaction) {  
    	
        if (priceFragment != null) {  
            transaction.hide(priceFragment);  
        }  
        if (openPositionFragment != null) {  
            transaction.hide(openPositionFragment);  
        }  
        if (closeHisFragment != null) {  
            transaction.hide(closeHisFragment);  
        }  
        if (orderHisFragment != null) {  
            transaction.hide(orderHisFragment);  
        }  
    }  
這樣就可以解決fragment切換重疊,無法正常顯示的問題。不過這裡提一個問題,就是hide方法執行之後,被隱藏的fragment,如果後台在獲取數據,刷新界面,是否會導致數據太多,程序崩潰的問題?

 

經過後台打印的時候,的確顯示的當前fragment更新數據,但那些隱藏的fragment仍然在後台運行,這勢必導致內存越來越被占用。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved