2013-04-16 50 views
0

作爲標題,我在我的APP上使用了ActionBarSherlock和SlidingMenu。Android ActionBarSherlock和SlidingMenu,菜單片段錯誤

要在動作條添加菜單項,我所做的是:

public class Main extends SherlockFragmentActivity 
{ 
    protected void onCreate(Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 
    setTheme(R.style.Theme_Sherlock); 
    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 
    getSupportActionBar(); 
    setContentView(R.layout.main); 

    FragmentManager fm=getSupportFragmentManager(); 
    FragmentTransaction ft=fm.beginTransaction(); 
    menuFrag=fm.findFragmentByTag("f1"); 
    if(menuFrag==null) 
    { 
     menuFrag=new MenuFragment(); 
     ft.add(menuFrag, "f1"); 
    } 
    ft.commit(); 

    //...other stuff 
    } 

    /** 
    * A fragment that displays a menu. This fragment happens to not 
    * have a UI (it does not implement onCreateView), but it could also 
    * have one if it wanted. 
    */ 
    @SuppressLint("ValidFragment") 
    public class MenuFragment extends SherlockFragment 
    { 
    public MenuFragment(){} 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setHasOptionsMenu(true); 
    } 

    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
    { 
     itemProgram=menu.add(0, MENU_ID_PROGRAMS, 0, getString(R.string.menuProgram)); 
     itemProgram.setIcon(R.drawable.icon_programs_select).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 

     itemMyList=menu.add(0, MENU_ID_MYLIST, 0, getString(R.string.menuMyList)); 
     itemMyList.setIcon(R.drawable.icon_mylist).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 

     itemPlaying=menu.add(0, MENU_ID_PLAYING, 0, getString(R.string.menuPlaying)); 
     itemPlaying.setIcon(R.drawable.icon_playing).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
    } 
    } 
} 

在大多數時間它運行良好,但有時當我開始我的應用程序,我會得到這個錯誤

android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment 
make sure class name exists, is public, and has an empty constructor that is public 

而我的APP剛崩潰...

爲了遵循這個錯誤信息,我在MenuFragment上添加了一個空的構造函數,但是我的APP有時候仍然被相同的錯誤強制關閉。

我也在StackOverflow中閱讀了一些關於這個的帖子,但只是不夠理解。

我能做些什麼來克服這個問題?

+0

我認爲這可能是因爲'MenuFragment'是一個內部類,它不是靜態的,所以它需要'Main'類對象被創建。你可以嘗試將'MenuFragment'類作爲一個單獨的類來移動,或者使其成爲靜態的。 –

+0

我不太確定如下行:getSupportActionBar();或公共的MenuFragment(){}在這裏是需要的。這並不能解決你的問題,但是更少的代碼行出錯的可能性更小 – letroll

回答

0

OK,我終於通過使用此

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    itemProgram=menu.add(0, MENU_ID_PROGRAMS, 0, getString(R.string.menuProgram)); 
    itemProgram.setIcon(R.drawable.icon_programs_select).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 

    itemMyList=menu.add(0, MENU_ID_MYLIST, 0, getString(R.string.menuMyList)); 
    itemMyList.setIcon(R.drawable.icon_mylist).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 

    itemPlaying=menu.add(0, MENU_ID_PLAYING, 0, getString(R.string.menuPlaying)); 
    itemPlaying.setIcon(R.drawable.icon_playing).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
    return super.onCreateOptionsMenu(menu); 
} 

,而不是這個

public class MenuFragment extends SherlockFragment 
{ 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
    { 
    //Some stuff... 
    } 
} 

固定這個固定我的問題。