2012-04-28 91 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()方法。