2013-09-27 205 views
16

我需要在我的Android應用程序中的一個目標薑餅也使用操作欄和片段的組合。所以我使用v7支持庫中的操作欄和v4支持庫中的片段,並使用FragmentActivity擴展我的類。ActionBar(支持)與片段(支持)

我得到一個錯誤,當我輸入了線

actionbar = getSupportActionBar(); 

的錯誤指出getSupportActionBar()是未定義的類型myFragmentClass(我的類名)。代碼完美工作,沒有支持庫。有沒有解決我的問題?

謝謝!

+1

你已經導入正確的庫? android.support.v7.app.ActionBar –

+0

我做到了。我得到了行動欄,以及工作。當我試圖包含片段時,問題就出現了。 – Anirudh

回答

19

您必須擴展ActionBarActivity而不是FragmentActivity有動作條帶片段。

如果您使用的是v7 appcompat庫,您的活動應該擴展ActionBarActivity,它是FragmentActivity的子類(有關更多信息,請參閱添加操作欄)。

您可以在下面給出的頁面找到更多信息。上面的行取自下面的頁面(最後一段)。 http://developer.android.com/training/basics/fragments/creating.html

編輯 - 這不是一個錯誤。它只是缺乏知識。有時基本不清楚。我目前正在從android網站上學習,這就是我給你的答案。

+1

是的,我通過擴展ActionBarActivity在幾天後得到了它的工作。忘了更新我的帖子。感謝您的回答! – Anirudh

1

要調用一個片段內的動作條使用:

actionbar = getActivity().getSupportActionBar(); 

一個片段有沒有動作條,但活動。這就是爲什麼你必須這樣稱呼它。

+0

我不能在eclipse中獲得getActivity()選項 – Anirudh

+0

這與eclipse無關。一定要在片段中調用這一行。 –

+0

該類的getActivity()方法未定義:這是我添加代碼時得到的錯誤。 – Anirudh

40

寫這些代碼的OnAttach()方法:

actionBar = ((ActionBarActivity) getActivity()).getSupportActionBar(); 

ActionBarActivity已棄用。使用

actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();

+0

感謝您的回答。下次試試吧。我已經開始使用操作欄,因爲.. – Anirudh

+0

ok ..它肯定會工作.. – bGorle

+0

這工作得很好! –

7

我一直在使用也試過:

actionbar = getActivity().getSupportActionBar(); 

,並沒有工作,直到我這樣做:

ActionBar actionBar = ((ActionBarActivity)getActivity()).getSupportActionBar(); 

所以工作時,我投給我的MainActivity。

+0

不要使用此方法,因爲片段被設計爲可以在多個活動中重複使用,並且如果您在除「MainActivity」之外的其他活動中使用該片段,它將會崩潰。 Bhr對超類ActionBarActivity的解答是正確的。 –

+0

正確。那時我沒有那些知識。 – Tinashe

0

我通過擴展ActionBarActivity並在AndroidManifest.xml 一些變化

<activity android:name="yourActionbarActivity" 

的Android試了一下:主題= 「@風格/ Theme.AppCompat.Light」>

和它的工作原理對我來說很好

-3

當你使用FragmentActivity時,不需要做任何改變,只需要使用 getActionBar().setTitle(title)而不是getSupportActionBar。它對我來說工作得很好。

+0

它不會在所有設備上工作。您需要getSupportActionBar()來支持API 11以下的設備。 – Anirudh

7

android.support.v7

ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); 

//than next for example 
actionBar.setDisplayHomeAsUpEnabled(true);