这不太可能,但它可能会为我节省大量时间来重新编写相同的代码。 我想使用警报类型服务(如Chathead)实现UI,但我还是想使用我的片段。可能吗?我知道我可以向窗口添加视图但是片段?
答案 0 :(得分:6)
碎片是活动的一部分,因此它们无法替代活动。虽然他们表现得像活动,但他们无法忍受。它的观点本身就不像活动。
片段表示行为或部分的用户界面 活性即可。您可以将单个活动中的多个片段组合到一起 构建多窗格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组件,并且其生命周期也无法超越onAttach
和onCreateView