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


      接着上一篇項目的進度。上一篇講了怎樣利用fragment來實現下拉菜單。公用菜單,以實現切換主界面數據的功能,這時候遇到的問題是:使用了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) {
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不再須要時採用的簡便方法。

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


            因為是公司項目。不能上傳整個project文件,只是能夠參考一下我的解決方案,有相同的問題的同學能夠交流一下還有沒有更優雅的解決的方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM