2014-01-12 104 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

謝謝,這是非常有幫助的。 –

相關問題