我决定通过使用新的 Fragments API 创建双窗格布局,为我的应用程序添加更多对平板电脑友好的 UI。但问题是我的应用程序中的许多屏幕都是 Activity 子类。手动将它们全部转换为片段不是一种选择,因为:
- 有近 50 个活动。
- 我希望我的应用程序与从 1.6 开始的所有 Android 版本兼容
- 而且我希望它尽可能小,因此使用兼容性库不是一个选项,因为它太大了
尽管我发现一些 问题的答案是不可能的,但我几乎成功地做到了。这是我的自定义片段的代码:
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() 在活动恢复后不会被调用,即我单击一个项目,另一个活动从当前开始,但是当我返回时,项目不再可单击。