1. 程式人生 > >Android fragment 使用replace並儲存狀態

Android fragment 使用replace並儲存狀態

Fragment的地位在開發中可是舉足輕重的,掌握它的的生命週期以及使用特性是非常重要的,例如在開發中常使用的模板:


點選選單,中心內容跟隨選單變化,但是在選單間切換時,需要儲存之前輸入的資訊或其他狀態,如果使用Fragment 的hide/show方法如下:

FragmentTransaction transaction = fragmentManager.beginTransaction();

		transaction.setCustomAnimations(R.anim.right_in, R.anim.left_fadeout,
				R.anim.right_fadein, R.anim.left_fadeout);
		
		transaction.hide(oldFragment);
		transaction.show(newFragment);
		
		transaction.commit();

另一種方法就是使用replace的方式代替hide/show,重點是呼叫FragmentTransaction.addToBackStack()來儲存fragment的狀態,使用程式碼如下:

	private void replaceContainer(MenuItems menuItem) {

		FragmentTransaction transaction = fragmentManager.beginTransaction();

		transaction.setCustomAnimations(R.anim.right_in, R.anim.left_fadeout,
				R.anim.right_fadein, R.anim.left_fadeout);

		Fragment fragment = retrieveFromCache(menuItem);

		// fragment沒有例項化過,new出一個新增到FragmentTransaction中,並且儲存fragment的狀態
		if (null == fragment) {
			try {
				fragment = menuItem.getClazz().newInstance();
				transaction.addToBackStack(null);
			} catch (Exception e) {

				Log.e(TAG, "例項化選單失敗");
				return;
			}
		}

		transaction.replace(R.id.content_frame, fragment);

		transaction.commit();
	}

	private Fragment retrieveFromCache(MenuItems menuItem) {
		//從fragmentManager中獲取已有的fragment物件
		for (Fragment backFragment : fragmentManager.getFragments()) {
			if (null != backFragment
					&& menuItem.getClazz().equals(backFragment.getClass())) {
				return backFragment;
			}
		}
		return null;
	}

不僅能儲存fragment的狀態,而且fragment的生命週期也能正常走動!!記得FragmentTransaction.addToBackStack()這個很重要哦!

相關推薦

Android fragment 使用replace儲存狀態

Fragment的地位在開發中可是舉足輕重的,掌握它的的生命週期以及使用特性是非常重要的,例如在開發中常使用的模板: 點選選單,中心內容跟隨選單變化,但是在選單間切換時,需要儲存之前輸入的資訊或其他狀態,如果使用Fragment 的hide/show方法如下: Frag

android開發之Fragment利用Bundle儲存狀態

相信很多小夥伴們在使用Fragment都會遇到狀態儲存的問題,今天介紹一個簡單的案例。 大家都知道在使用Activity之間傳遞資料時大部分情況下都是用Bundle; 先幫大家複習一下Bundle,利用鍵值對(key-value)來儲存資料的,內部包含ArrayMap<

Viewpager中的Fragment 滑動時儲存狀態的問題

之前遇到了在ViewPager中使用Fragment的情況,結果遇到了一個問題就是當viewPager划過去,再滑動回來後之前的fragment又回到了初始化的狀態。所以就研究了一下。網上搜了一下,大部分都是說這個FragmentPagerAdapter和FragmentStatePagerAdap

關於Viewpager中的Fragment 滑動時儲存狀態的問題

package com.example.viewpagerfragmentdemo; import java.util.List; import android.os.Bundle; import android.support.v4.app.Fragment; import android.suppor

Android 螢幕旋轉時儲存狀態

android中每次螢幕的旋轉都會重啟Activity,所以應該給每個activity加上 android:configChanges="keyboardHidden|orientation"屬性,就不會重啟activity,而是去呼叫 onConfigurationCh

Android fragment.replace()第一個引數不能真正替換的解決方法

在用tabhost切換fragment的時候,會用到切換fragment的,Android fragment .replace()的第一個引數要選對 首先貼一段佈局檔案  <RelativeLayout xmlns:android="http://schemas

Android Fragment使用(三) Activity, Fragment, WebView的狀態儲存和恢復

Android中的狀態儲存和恢復 Android中的狀態儲存和恢復, 包括Activity和Fragment以及其中View的狀態處理. Activity的狀態除了其中的View和Fragment的狀態之外, 還需要使用者手動儲存一些成員變數. Fragment的狀態有它自己的例項狀態和其中的View狀態,

Android移動開發檢測網路狀態使用BroadcastReceiver(廣播接收者)進行接收網路變化的後續處理

在Android開發中,許多功能需要網路連線,所以在開發過程中需要進行手機網路的檢測。而每做一個App,就要進行檢測,那麼我直接將檢測網路狀態的功能封裝成一個類。 檢測網路狀態所需要的Api: ConnectivityManager主要用於檢視網路狀態和管理網路連線相關的

Android camera2 回撥imagereader 從Image拿到YUV資料轉化成RGB,生成bitmap儲存

ImageUtil.java import android.graphics.ImageFormat; import android.media.Image; import android.os.Build; import android.support.annotation.RequiresApi;

Android日誌列印類LogUtils,能夠定位到類名,方法名以及出現錯誤的行數儲存日誌檔案

  關注finddreams,一起分享,一起進步!http://blog.csdn.net/finddreams/article/details/4556

Android開發雜記(1)---截圖某個View儲存到系統圖庫

View view = new View(context) view.setDrawingCacheEnabled(true); view.buildDrawingCache(); Bitmap bitmap = Bitmap.createBitmap(mExa

71.android 簡單的電話錄音儲存到本地(來電和去電都支援)

 //第一步 先加許可權 在AndroidManifest.xml裡: //有打電話的許可權,讀寫許可權,還有錄音許可權。  <uses-permission android:name="android.permission.CALL_PHONE" />

Android FFmpeg視訊轉碼儲存到本地

本文講述在Android中, 如何將FFmpeg視訊轉碼為YUV格式並儲存到本地。 配置好之後,我們先來明確下概念,FFmpeg解碼的流程是固定的 av_register_all: 註冊所有元件 avformat_open_input : 開啟輸入視訊檔案

Android下載網路圖片儲存在本地相簿中

package com.thfund.bigtree.StarCounselor.activity; import android.content.Context; import android.content.Intent; import android.grap

微信小程式 獲取使用者資訊儲存登入狀態

前言、   微信小程式的執行環境不是在瀏覽器下執行的。所以不能以cookie來維護登入態。下面我就來說說我根據官方給出的方法來寫出的維護登入態的方法吧。 一、登入態維護 官方的文件地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-l

Android下載網路圖片儲存到相簿

下載類,可以url下載到相簿,記得在清單加許可權,6.0程式碼動態加許可權判斷,下載圖片要在子執行緒中下載,下載完後廣播更新相簿 在清單檔案裡面新增許可權: <!--網路--> <uses-permission android:name="android

Android Fragment add/replace以及backstack

無論Fragment以何種方式加入,都不會影響backstack,backstack由addToBackStack函式決定,只有呼叫了這個函式,才會將Fragment加入返回棧。這個說法其實不太準確,返回棧記錄的是Fragment切換的過程,所以加入返回棧的是Transaction,而不是Fragment本身

Android全域性捕獲crash儲存日誌到本地

    大家都知道崩潰時,無法檢視崩潰資訊,對於某些不易復現的bug,我們需要把崩潰log儲存在本地,適當時還可以上傳到伺服器,本節實現的工具可收集收集裝置、崩潰時間、崩潰日誌,儲存在本地。崩潰採集工具依賴Application和Thread.UncaughtExcepti

Android studio使用git提交但是沒有push,如何回退儲存

今天遇到一個頭疼的問題本地寫好了一些東西,但是沒有提交,忘記了,切換到另一個分支上,然後就提交了,但是沒有push 1問題來了,如何取消我的提交呢,我做的操作只是提交到了本地倉庫,並沒有提交到git遠端倉庫,而我想做的是,退回到提交前,並且儲存我所有的改動,查了很久終於找到

android上用C語言讀取fb0實現截圖,儲存為rgb565的bmp

好久沒有看,這兩天在折騰一下,更新一下:修正了framebuffer bgra_8888格式截圖變紅的問題 =================================       android上用C語言讀取fb0實現截圖,儲存為bmp圖片, 支援16位