0

這可能相當明顯,但我不明白。 我正在嘗試使用suggested way of creating dialogs,擴展DialogFragment。現在,問題是,我不知道如何調用它。文件規定:顯示對話框沒有FragmentActivty

DialogFragment newFragment = new FireMissilesDialogFragment(); 
newFragment.show(getSupportFragmentManager(), "missiles"); 

,但我的活動沒有延伸FragmentActivity(而且由於我的應用程序的設計,它不能擴展),這樣getSupportFragmentManager()不能被調用。

針對此問題的任何解決方法? 我想跳過創建對話框的棄用方式。

+0

如果您的應用程序設計用於API級別> = 11,則可以使用本機片段(使用'getFragmentManager()')。否則,你沒有任何選擇。 – Luksprog

+0

嗨@Maggie下載支持庫 – Geros

+0

我正在使用支持庫,因爲我需要支持舊版本。 – Maggie

回答

2

答案是否定的。

FragmentActivity(及其變體)是支持FragmentManager和Fragments的。

你可能會相信共同的解決方案「並且由於我的應用程序的設計,它不能擴展它」

  • 如果您使用的是ListActivity,只是把你的佈局列表。
  • 如果您使用的是MapActivity,請切換到新的地圖API。
  • 如果您使用的是TabActivity,那就不推薦使用了,您應該使用Fragments。
+0

你所說的一切都是正確的,雖然它不能解決我的問題,但我會接受你的答案。 – Maggie

0

例如,您可以創建擴展DialogFragment一類,並調用它像這樣:

_dialogFiltre = FragmentDialog.newInstance(R.string.tle_dialog_filter, this); 
       _dialogFiltre.setValidDialogListener(this); 
       _dialogFiltre.setCancelable(false); 
       _dialogFiltre.show(getSupportFragmentManager(), null); 

的方法新的實例:

public static DialogFilter newInstance(int title, Context context) { 

    FragmentDialog dialog = new FragmentDialog(); 
    Bundle args = new Bundle(); 
    args.putInt("title", title); 
    dialog.setArguments(args); 
    dialog._context = context; 
    return dialog; 
} 

如果你是不是在FragmentActivity我不沒有看到任何解決方案。爲什麼你的應用程序設計不允許你使用FragmentActivity?

+0

因爲我有一個庫項目,並且我的項目中的每個活動都從該庫項目擴展基本活動。由於該庫項目已在我公司的其他20個應用程序中使用,因此不容易對其進行更改,而無需冒任何其他問題。我對這個設計問題給予了很多的思考,但還沒有能夠提出一個足夠好的解決方案。 – Maggie

+0

哦,我明白了。沒有簡單的解決方案:/所以你不能創建一個BaseFragmentActivity僅僅作爲這個案例嗎? (除了BaseActivity) –

+1

嗨@Maggie我知道你已經接受了我的答案,但只是關於你在這個庫上的評論。公司真的應該真的考慮升級這個庫,因爲沒有擴展FragmentActivity,越來越多的功能將不可用。例如,地圖V2,裝載機,對話框,平板電腦等 – Budius

-1

那麼您可以直接調用getSupportFragmentManager();FragmentActivity,但不是Fragment本身。所以要調用getSupportFragmentManager();你可以做的是首先得到FragmentActivity和那個電話getSupportFragmentManager();。所以當你得到FragmentActivity,你可以這樣調用函數:

getActivity().getSupportFragmentManager(); 

這裏getActivity()Fragment相關的回報FragmentActivity

你所做的是
1.首先,你已經創建了自定義DialogFragment類的實例。
2.你正在顯示該對話框。

現在,您已經創建了自定義DialogFragment的實例,爲什麼不使用它來檢索對片段管理器的支持。所以你可以做的是:

DialogFragment newFragment = new FireMissilesDialogFragment(); 
newFragment.show(newFragment.getActivity().getSupportFragmentManager(), "missiles"); 

這是什麼會做的是你要與newFragment相關FragmentActivity和對FragmentActivity你打電話getSupportFragmentManager();

不幸的是,我沒有測試過,但這可能工作。試試吧,讓我們知道。

+0

不,它不起作用。我認爲這是違反所有邏輯的,這樣的事情甚至可能會奏效。正如我所說,我的活動沒有擴展FragmentActivity,所以getSupportFragmentManager返回null。對不起,我不得不消除誤導。 – Maggie