2015-04-28 90 views
4

當我使用片段時,我沒有得到ActionBar中的菜單。儘管執行了onCreateOptionsMenu()方法,但我不知道代碼的問題在哪裏。下面是我使用的代碼:如何在片段中添加菜單?

public class LesAvis extends Fragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    setHasOptionsMenu(true); 
    View rootView = inflater.inflate(R.layout.avis, container,false); 
    ListView listeAvis = (ListView) rootView.findViewById(R.id.listView); 
    return rootView; 

} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.my_menu, menu); 
    super.onCreateOptionsMenu(menu,inflater); 
} 

} 

然而,當我使用這部分代碼爲實現onCreateOptionsMenu()方法中,我得到了我想要的(在我的動作條菜單):

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    menu.add("Compte") 
    .setIcon(R.drawable.ic_compte) 
    .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
    menu.add("Compte") 
    .setIcon(R.drawable.ic_historique) 
    .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
    menu.add("Compte") 
    .setIcon(R.drawable.ic_param) 
    .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
} 

回答

11

要添加菜單的每個片段,你應該通過許多步驟:

1)首先,在該片段中的onCreateView()像下面添加setHasOptionsMenu(真):

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
Bundle savedInstanceState) { 
setHasOptionsMenu(true); 
.... 
} 

2)覆蓋片段的onCreateOptionsMenu()如下方法:

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
{ 
inflater.inflate(R.menu.menu_above_details_fragment, menu); 
return; 
} 

3)重寫該活動的onOptionsItemSelected()方法是這樣的:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
if (mDrawerToggle.onOptionsItemSelected(item)) { 
    return true; 
} 
Intent i; 
switch (item.getItemId()) { 
case R.id.action_param: 
    i = new Intent(this, Settings.class); 
    startActivity(i); 
    return true; 

case R.id.action_history: 
    i = new Intent(this, HistoryMenu.class); 
    startActivity(i); 
    return true; 
} 
return onOptionsItemSelected(item); 
} 

4)不要覆蓋片段的onOptionsItemSelected(),也不要覆蓋Activity的onCreateOptionsMenu()。

0

我想你需要創建片段時,添加以下行: setHasOptionsMenu(true);

0

呼叫setHasOptionsMenu(true)onCreate()方法,而不是onCreateView()

+0

它不工作了! – HiddenDroid

+0

你是否在片段(不是活動)中的onCreate()中調用setHasOptionsMenu(true)?片段也有onCreate()方法,但也許你知道。嘗試將onCreatOptionsMenu()添加到Activity中,並在Fragments中使用onPrepareOptionsMenu()。 – Jerry