在片段中启动活动

时间:2012-04-28 16:50:15

标签: java android android-fragments android-activity

我决定使用新的片段API创建双窗格布局,为我的应用添加更多平板电脑友好的UI。但问题是我的应用程序中有很多屏幕是Activity子类。手动将它们全部转换为碎片不是一种选择,因为:
- 有近50项活动 - 我希望我的应用程序能够与从1.6开始的所有Android版本兼容 - 我希望它尽可能小,所以使用兼容性库不是一个选项,因为它太大了

虽然我发现some questions的答案是说不可能,但我几乎成功完成了。这是我的自定义片段的代码:

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 个答案:

答案 0 :(得分:0)

我终于通过在onResume之前和之后比较所有ListView的字段值来找到解决方案。解决此问题的方法是在列表适配器上调用notifyDataSetInvalidated()方法。