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에서 이에 대한 일부 스레드를 읽었지만 충분히 이해하지 못했습니다.
이 문제를 해결하려면 어떻게해야합니까?
'MenuFragment'는 내부 클래스이고 static이 아니기 때문에'Main' 클래스 객체를 만들 필요가 있기 때문일 수 있습니다. 'MenuFragment' 클래스를 별도의 클래스로 이동 시키거나 정적으로 만들 수 있습니다. –
잘 모르겠습니다. getSupportActionBar(); 또는 공용 MenuFragment() {}가 필요합니다.이 방법으로 문제가 해결되지는 않지만 코드 줄 수가 적어 오류가 발생할 확률이 적습니다. – letroll