2012-04-28 56 views
0

我決定使用新的片段API創建雙窗格佈局,以便將更多適用於平板電腦的UI添加到我的應用程序中。但問題是我的應用程序中有很多屏幕是活動子類。手動將它們全部轉換爲碎片不是一種選擇,因爲:
- 有近50項活動。
- 我希望我的應用能夠與所有版本的Android兼容1.6開始
- 我希望它儘可能小,因此使用兼容性庫不是一個選項,因爲它太大了
在片段中開始活動

雖然我發現somequestions其答案是說這是不可能的,我已經做得差不多了。這裏是我的自定義片段的代碼:

public static class ActivityFragment extends Fragment{ 
    Intent intent; 
    View view; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     if(intent==null){ 
      Bundle a=getArguments(); 
      intent=a.getParcelable("intent"); 
     } 
     LocalActivityManager am=((ActivityGroup)getActivity()).getLocalActivityManager(); 
     Window wnd=am.startActivity("intent"+intent.hashCode(), intent); 
     if(view==null){ 
      view=wnd.getDecorView(); 
      view.setLayoutParams(new FrameLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT)); 
     } 
     return view; 
    } 

    public void onDestroy(){ 
     super.onDestroy(); 
     if(!((TabletMainActivity)getActivity()).tabs.containsValue(this)){ 
      ((ActivityGroup)getActivity()).getLocalActivityManager().destroyActivity("intent"+intent.hashCode(), true); 
     } 
    } 
} 

爲了工作,它只能在ActivityGroup中使用。 唯一的問題是在使用ListView方法的某些活動中,onItemClick()在活動恢復後不會被調用,即,我單擊一個項目,另一個活動在當前之上開始,但當我返回時,項目不再可點擊。

+1

您不能使用沒有兼容性庫的片段,並且只會爲您的apk添加〜110kb。 – zapl 2012-04-28 17:00:03

+0

我直接使用它們並僅在蜂窩上啓用。 – Grishka 2012-04-28 17:13:04

+1

這意味着您必須創建ActivityFragments of Activities以作爲碎片使用的所有部分 - 這同樣會增加您的apk大小,並且我沒有看到使用支持庫的好處。 – zapl 2012-04-28 17:19:58

回答

0

我終於找到了一個解決方案,通過比較onResume之前和之後的所有ListView的字段值。解決此問題的方法是在列表適配器上調用notifyDataSetInvalidated()方法。