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

點擊菜單,中心內容跟隨菜單變化,但是在菜單間切換時,需要保存之前輸入的信息或其他狀態,如果使用Fragment 的hide喎?/kf/ware/vc/" target="_blank" class="keylink">vc2hvd7e9t6jI58/Co7o8L3A+CjxwPjxwcmUgY2xhc3M9"brush:java;">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();
但是使用這個中方法可能出現一個Bug:在菜單切換時如A-B-C切換,當顯示C內容時,A或B組件的信息也可能顯示出來,並且還可以響應事件,對應用來說可是不能容忍的!
至於為什麼會出現這種問題的原因還沒有調查到,如果您知道,求告知求科普。。。
另一種方法就是使用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;
}
深入理解Android事件分發機制
Android事件分發,參考了網上的很多資料。基本基於android2.2的源碼來分析,因為即使是新的版本,裡面的原理思想也沒有改變。有了大神的肩膀,我在理解了其原理的基
Android 靜默安裝和智能安裝的實現方法
1 簡介最近研究了Android的靜默安裝和智能安裝,於是寫博客記錄一下。靜默安裝就是無聲無息的在後台安裝apk,沒有任何界面提示。智能安裝就是有安裝界面,但全部是自動的
AppWidget源碼分析---接口類
最近項目中接觸到AppWidget,相對來說這部分比較簡單,所以趁著空余時間詳細閱讀了AppWidget的源碼。這篇文章主要是從源碼上分析AppWidget中API類的相
Android實現的仿淘寶購物車demo示例
本文實例講述了Android實現的仿淘寶購物車。分享給大家供大家參考,具體如下:夏的熱情漸漸退去,秋如期而至,豐收的季節,小編繼續著實習之路,走著走著,就走到了購物車,逛