編輯:關於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事件分發,參考了網上的很多資料。基本基於android2.2的源碼來分析,因為即使是新的版本,裡面的原理思想也沒有改變。有了大神的肩膀,我在理解了其原理的基
1 簡介最近研究了Android的靜默安裝和智能安裝,於是寫博客記錄一下。靜默安裝就是無聲無息的在後台安裝apk,沒有任何界面提示。智能安裝就是有安裝界面,但全部是自動的
最近項目中接觸到AppWidget,相對來說這部分比較簡單,所以趁著空余時間詳細閱讀了AppWidget的源碼。這篇文章主要是從源碼上分析AppWidget中API類的相
本文實例講述了Android實現的仿淘寶購物車。分享給大家供大家參考,具體如下:夏的熱情漸漸退去,秋如期而至,豐收的季節,小編繼續著實習之路,走著走著,就走到了購物車,逛