2013-04-16 1 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'는 내부 클래스이고 static이 아니기 때문에'Main' 클래스 객체를 만들 필요가 있기 때문일 수 있습니다. 'MenuFragment' 클래스를 별도의 클래스로 이동 시키거나 정적으로 만들 수 있습니다. –

+0

잘 모르겠습니다. getSupportActionBar(); 또는 공용 MenuFragment() {}가 필요합니다.이 방법으로 문제가 해결되지는 않지만 코드 줄 수가 적어 오류가 발생할 확률이 적습니다. – letroll

답변

0

OK, 나는 마침내

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

대신이

@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); 
} 

를 사용하여이 고정 그리고 내 문제를 해결.