是否有可能没有活动的片段?

时间:2014-01-12 05:36:06

标签: android

这不太可能,但它可能会为我节省大量时间来重新编写相同的代码。 我想使用警报类型服务(如Chathead)实现UI,但我还是想使用我的片段。可能吗?我知道我可以向窗口添加视图但是片段?

3 个答案:

答案 0 :(得分:6)

碎片是活动的一部分,因此它们无法替代活动。虽然他们表现得像活动,但他们无法忍受。它的观点本身就不像活动。

From Android Developers

  

片段表示行为或部分的用户界面   活性即可。您可以将单个活动中的多个片段组合到一起   构建多窗格UI并在多个活动中重用片段。您   可以将片段视为活动的模块化部分,它具有   它自己的生命周期,接收自己的输入事件,你可以   在活动运行时添加或删除(有点像“子”   活动“你可以在不同的活动中重复使用。”

我希望它对你有所帮助。

答案 1 :(得分:2)

正如人们指出你不能,但是,你总能创造 某种片段包装器。 例如:

    public class ActivityFragmentWrapper extends FragmentActivity {
        public static final String KEY_FRAGMENT_CLASS = "keyFragmentClass";

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            if (getIntent().getExtras() != null) {
                String fragmentClass = (String) getIntent().getExtras().get(KEY_FRAGMENT_CLASS);
                try {
                    Class<?> cls = Class.forName(fragmentClass);
                    Constructor<?> constructor = cls.getConstructor();
                    Fragment fragment = (Fragment) constructor.newInstance();
                    // do some managing or add fragment to activity
                    getFragmentManager().beginTransaction().add(fragment, "bla").commit();
                } catch (Exception LetsHopeWeCanIgnoreThis) {
                }
            }
        }

        public static void startActivityWithFragment(Context context, String classPathName) {
            Intent intent = new Intent(context, ActivityFragmentWrapper.class);
            intent.putExtra(KEY_FRAGMENT_CLASS, classPathName);
            context.startActivity(intent);
        }
    }

您可以像以下一样开始:

    ActivityFragmentWrapper.startActivityWithFragment(context, SomeSpecificFragment.class.getCanonicalName().toString());

当然,如果你的片段有另一个构造函数,你必须检索不同的 一,但那部分变得容易了。

答案 2 :(得分:0)

否,没有活动就无法存在碎片。他们需要一个活动作为入口点,否则他们将无法启动自己的UI组件,并且其生命周期也无法超越onAttachonCreateView