2014-01-12 59 views
4

这不太可能,但它可能为我节省很多时间来重新编写相同的代码。 我想使用警报类服务(如Chathead)实现一个用户界面,但我仍然想使用我的碎片。可能吗?我知道我可以添加意见的窗口,但碎片?是否有可能没有活动的片段?

+1

没有。片段是由一个活动主办 – Raghunandan

+0

我认为不可能 – FxRi4

+0

是的。我们可以有一个没有活动的片段。这可以通过将“View”附加到“WindowManager”来完成,并且在“View”中我们可以包含“Fragment”。 – shobhan

回答

6

碎片是活动的一部分,所以它们不能取代活动。虽然他们表现得像活动,但他们无法忍受自己。它的观点本身不能像活动一样行事。

From Android Developers

甲片段表示行为或用户接口的在 活动一个部。您可以在单个活动中合并多个片段到 构建多窗格用户界面并在多个活动中重复使用片段。 可以将片段看作活动的模块化部分,它具有其自己的生命周期 ,接收其自己的输入事件,并且可以在活动运行时添加或删除哪些内容(有点像“sub 活动“,您可以在不同的活动中重复使用)。

我希望这对你有帮助。

2

那么人们已经指出你不能,但是,你总是可以创建 某种片段包装。 例如用途:如果你的片段具有你所检索不同 彼此的构造,但部分变得更容易

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

当然:

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); 
     } 
    } 

你可以启动它喜欢。

+0

谢谢,这是非常有帮助的。 –

相关问题