2013-04-16 52 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... 
    } 
} 

固定这个固定我的问题。