2013-03-24 43 views
0

當活動更改時,我喜歡更改菜單。我有MainActivity.java和activity_main.xml菜單。然後我有MyDetailFragment.java和detail_view_menu.xml。在MainActivity菜單中MainActivity.java的onCreateOptionsMenu膨脹爲將一項活動切換爲另一項活動時更改菜單

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    new MenuInflater(this).inflate(R.menu.activity_main, menu); 
    return (super.onCreateOptionsMenu(menu)); 
} 

它工作正常。當其中一個項目被點擊並加載MyDetailFragment.java時,我喜歡顯示detail_view_menu.xml。我如何實現是

public class MyDetailsFragment extends Fragment { 


TrackerInfo trackerInfo; 
public MyDetailsFragment() {  
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 

    View view = inflater.inflate(R.layout.my_details_fragment, container, false); 
    setHasOptionsMenu(true); 
    TextView displayText = (TextView) view.findViewById(R.id.details); 
    displayText.setText(trackerInfo.getIdnumber()); 
    return view; 
} 

public void retrieveData(TrackerInfo tracker){ 
    trackerInfo = tracker; 
} 

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

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.track: 

      return (true); 

     case R.id.view_history: 
      return (true); 

    } 

    return (super.onOptionsItemSelected(item));}} 

但問題是,菜單仍然是相同的activity_main菜單,永遠不會改變。可能是什麼問題呢?

回答

0

您需要超級調用相同的方法。

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

一旦我有問題,當新的菜單項附加到菜單。所以我解決它,刪除所有的菜單項,然後再膨脹新的項目。 像這樣:

public static void emptyFragmentOptionsMenu(Menu menu){ 
     if(menu==null)return; 
     for(int i=0; i < menu.size(); i++) 
      menu.removeItem(menu.getItem(i).getItemId()); 
} 

乾杯,

編輯:我如何使用方法:

@Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     emptyFragmentOptionsMenu(menu); 
     inflater.inflate(R.menu.detail_view_menu, menu); 
     super.onCreateOptionsMenu(menu, inflater); 
    } 
+0

你怎麼能有菜單的菜單中你的論點?我的意思是你如何創建菜單對象來調用你的public static void emptyFragmentOptionsMenu(Menu menu)。 – Bryanyan 2013-03-24 14:10:45

+0

請參閱編輯:) – 2013-03-24 14:18:45

0

第一:你應該有你的onCreateView()以上的onCreate()方法有你set setHasOptionsMenu(true);

秒:您需要在onCreateOptionsMenu()的充氣器後使用super.onCreateOptionsMenu(menu, inflater);

第三:你剛纔複製你的問題,你最初發布here。請不要在將來這樣做。我已經提供了關於這個問題的更多細節,然後你打開了這個問題。下次只需編輯您的原始問題。否則,你可能會破壞自己,併爲那些試圖幫助你的人煩惱。


做到這一點

public class MyDetailsFragment extends Fragment { 


TrackerInfo trackerInfo; 
public MyDetailsFragment() {  
} 

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setHasOptionsMenu(true); // this should go here not in onCreateView(); 

     // .... 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 

    View view = inflater.inflate(R.layout.my_details_fragment, container, false); 
    TextView displayText = (TextView) view.findViewById(R.id.details); 
    displayText.setText(trackerInfo.getIdnumber()); 
    return view; 
} 

public void retrieveData(TrackerInfo tracker){ 
    trackerInfo = tracker; 
} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.detail_view_menu, menu); 
    super.onCreateOptionsMenu(menu, inflater); // you need to call super 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.track: 

      return (true); 

     case R.id.view_history: 
      return (true); 

    } 

    return (super.onOptionsItemSelected(item)); 
    } 
} 
相關問題