Android fragment 切換載入數據卡頓問題

      接着上一篇項目的進度。上一篇講了怎樣利用fragment來實現下拉菜單。公用菜單,以實現切換主界面數據的功能,這時候遇到的問題是:使用了fragment的切換界面方法。但載入的數據太多。用戶從一個界面切換到這個界面的時候。至少有一兩秒的卡頓,這是沒法忍受的,代碼例如如下:java

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) {
transaction = manager.beginTransaction();
transaction.replace(R.id.fragment_container, priceFragment);
titleView.setText(priceFragment.getFragmentTitle());
transaction.commit();
popupWindow.dismiss();
}
});
}
     上述代碼在切換fragment界面的時候,依據fragment的方法api,replace是要又一次生成實例的,這就勢必致使數據又一次載入,咱們必須得採取隱藏的方式或者加一個進度條來緩解。這裏我採用的是fragment提供的hide方法,來實現數據的高速顯示,改動代碼例如如下:

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) {
				transaction = manager.beginTransaction();
				/*
				 * qiulinhe:2015年7月21日10:54:51
				 * 解決切換卡頓的問題
				 */
				if (!priceFragment.isAdded()) {    // 先推斷是否被add過
	                transaction.hide(openPositionFragment).add(R.id.fragment_container, priceFragment).commit(); // 隱藏當前的fragment。add下一個到Activity中
	                titleView.setText(priceFragment.getFragmentTitle());
				} else {
	                transaction.hide(openPositionFragment).show(priceFragment).commit(); // 隱藏當前的fragment,顯示下一個
	                titleView.setText(priceFragment.getFragmentTitle());
				}</span>
				
				popupWindow.dismiss();
			}
		});

	}
       原理就是:

翻看了Android官方Doc。和一些組件的源碼。發現,replace()這種方法僅僅是在上一個Fragment再也不需要時採用的簡便方法。api

正確的切換方式是add()。切換時hide()。add()還有一個Fragment。再次切換時,僅僅需hide()當前,show()還有一個。
這樣就能作到多個Fragment切換不又一次實例化:ide

            由於是公司項目。不能上傳整個project文件,只是可以參考一下個人解決方案,有相同的問題的同窗可以交流一下還有沒有更優雅的解決的方法。
相關文章
相關標籤/搜索