天天看點

Fragment 點點滴滴

對于要重用資源,節約代碼量,fragment起到很好的制約作用

一  先來看看fragment的調用方式。

1.寫在布局中

比如我有一個fragme叫  DateFragment.class

第一種方法

<fragment android:name = "com.kankan.kankanstyle.fragment.DateFragment"

 android:id = "@+id/datefragment"

android:layout_weight="1"

android:layout_width="0dp"

android:layout_height="match_parent"/>

在activity中直接顯示這個fragment。

2.在java代碼中,通過fragmentManager找到

DateFragment fragment = getSupportedFragmentManager().findFragmentById(R.id.dateFragment);

3.就是最常見的    new Fragment();了,這裡不說了。

二 數值傳遞

1.使用SharePrefeerence,

優點,一次存儲,多次多位置調用資料不丢失。

 SharePreference sharePreference = LSharePreference.getInstance(getActivity());

寫    sharePreference.setString("QUALITY_CONDITION",mData.get(v.getId() - 3020).id + "");

讀   sharePreference.getString("QUALITY_CONDITION");

2.使用構造器傳入資料,使用public方法傳出資料

這樣寫構造器

public static final synchronized QualityConditionFragment newInstance(

String strs) {

QualityConditionFragment f = new QualityConditionFragment();

Bundle args = new Bundle();

args.putString(KEY, strs);

f.setArguments(args);

return f;

}

這裡的strs就是傳入的參數。

你在activity 中初始化fragment的時候 ,可以傳入這個資料。

怎麼取呢?  用bundle

String str = getArguments().getString("KEY");

三,顯示與隐藏

Fragment 可以直接show  與 hide  ,這個比你隐藏Layout友善

fragmetn有show() 方法   還有  hide()方法

但是hide(),就是執行了onDestroy()方法,怎麼辦?

可以在重寫一下fragment的onSaveInstanceState方法

儲存一下 fragment 的 狀态 isHidden();

然後在oncrate 

判斷一下

if (savedInstanceState != null) {

                        if (savedInstanceState.getBoolean("isHidden")) {

                                getFragmentManager().beginTransaction().hide(this).commit();

                        }

                }

四,在fragment中使用上下文

不用多說 用  getActivity()   而不要用getApplicationConText()

在android中有兩種context,一種是 application context,

一種是activity context,通常我們在各種類和方法間傳遞的是activity context。

當螢幕旋轉的時候,系統會銷毀目前的activity,儲存狀态資訊,再建立一個新的。

比如我們寫了一個應用程式,它需要加載一個很大的圖檔,

我們知道,螢幕旋轉時候,執行了  onPause(),,onStop(),onDestroyView(),onDestroy(),onDetach()方法

我們不希望每次旋轉螢幕的時候都銷毀這個圖檔,重新加載。實作這個要求的簡單想法就是定義一個靜态的Drawable,

這樣Activity類建立銷毀它始終儲存在記憶體中。

避免這種記憶體洩露的方法是避免activity中的任何對象的生命周期長過activity,避免由于對象對activity的引用導緻activity 不能正常被銷毀。我們可以使用application context。application context伴随application的一生,與activity的生命周期無關。application context可以通過Context.getApplicationContext或者Activity.getApplication方法擷取。

避免context相關的記憶體洩露,記住以下幾點:

1. 不要讓生命周期長的對象引用activity context,即保證引用activity的對象要與activity本身生命周期是一樣的

2. 對于生命周期長的對象,可以使用application context

3. 避免非靜态的内部類,盡量使用靜态類,避免生命周期問題,注意内部類對外部對象引用導緻的生命周期變化