Android 使用SlidingActivityBase和SherlockFragmentActivity创建滑动菜单
我一直遵循本教程创建滑动菜单: 因为我使用的是Sherlock,所以我不得不改变我的类声明:Android 使用SlidingActivityBase和SherlockFragmentActivity创建滑动菜单,android,actionbarsherlock,slidingmenu,Android,Actionbarsherlock,Slidingmenu,我一直遵循本教程创建滑动菜单: 因为我使用的是Sherlock,所以我不得不改变我的类声明: public class BaseActivity extends SlidingFragmentActivity 对下列事项: public class RggarbActionBar extends SherlockFragmentActivity implements SlidingActivityBase 现在每当我使用getSlidingMenu()方法时,我都会得到一个NullPo
public class BaseActivity extends SlidingFragmentActivity
对下列事项:
public class RggarbActionBar extends SherlockFragmentActivity implements SlidingActivityBase
现在每当我使用getSlidingMenu()方法时,我都会得到一个NullPointerException,它在我的类中保持为空并返回null
这是我的全班同学:
public class RggarbActionBar extends SherlockFragmentActivity implements SlidingActivityBase {
protected ListFragment listFragment;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
listFragment = new RggarbSlidingMenu();
SlidingMenu slidingMenu = getSlidingMenu();
slidingMenu.setShadowWidth(15);//outsource these
slidingMenu.setBehindOffset(60);
slidingMenu.setFadeDegree(0.35f);
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
MenuInflater inflater = getSupportMenuInflater();
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
ActionBar actionBar = getSherlock().getActionBar();
actionBar.setBackgroundDrawable(new
ColorDrawable(Color.parseColor("#680e96")));
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayUseLogoEnabled(false);
actionBar.setHomeButtonEnabled(true);
actionBar.setIcon(R.drawable.logo_icon);
inflater.inflate(R.menu.action_bar_items, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
if(itemId == android.R.id.home) {
toggle();
return true;
}
else if (itemId == R.id.abFeed) {
Intent feed = new Intent(this, Home.class);
startActivity(feed);
return true;
} else if (itemId == R.id.abNotifications) {
Intent notifications = new Intent(this, Notifications.class);
startActivity(notifications);
return true;
} else if (itemId == R.id.abAddNewItem) {
Intent addNewItem = new Intent(this, ItemAdd.class);
startActivity(addNewItem);
return true;
} else if (itemId == R.id.abSearch) {
Intent search = new Intent(this, SearchItems.class);
startActivity(search);
return true;
} else {
return onOptionsItemSelected(item); //watch out for this one. if any problems occur change to "return true"
}
}
public class BasePagerAdapter extends FragmentPagerAdapter{
private List<Fragment> mFragments = new ArrayList<Fragment>();
private ViewPager mPager;
public BasePagerAdapter(FragmentManager fm, ViewPager vp){
super(fm);
mPager = vp;
mPager.setAdapter(this);
for (int i = 0; i < 3; i++){
addTab(new RggarbSlidingMenu());
}
}
public void addTab(Fragment frag){
mFragments.add(frag);
}
@Override
public Fragment getItem(int position){
return mFragments.get(position);
}
@Override
public int getCount(){
return mFragments.size();
}
}
@Override
public void setBehindContentView(View view, LayoutParams layoutParams) {
// TODO Auto-generated method stub
}
@Override
public void setBehindContentView(View view) {
// TODO Auto-generated method stub
}
@Override
public void setBehindContentView(int layoutResID) {
// TODO Auto-generated method stub
}
@Override
public SlidingMenu getSlidingMenu() {
// TODO Auto-generated method stub
return null;
}
@Override
public void toggle() {
// TODO Auto-generated method stub
}
@Override
public void showContent() {
// TODO Auto-generated method stub
}
@Override
public void showMenu() {
// TODO Auto-generated method stub
}
@Override
public void showSecondaryMenu() {
// TODO Auto-generated method stub
}
@Override
public void setSlidingActionBarEnabled(boolean slidingActionBarEnabled) {
// TODO Auto-generated method stub
}
}
公共类RggarbActionBar扩展SherlockFragmentActivity实现SlidingActivityBase{
受保护的ListFragment ListFragment;
@凌驾
公共布尔onCreateOptions菜单(菜单){
listFragment=新建RggarbSlidingMenu();
SlidingMenu SlidingMenu=getSlidingMenu();
slidingMenu.setShadowWidth(15);//外包这些
滑动菜单。设置初始偏移(60);
滑动菜单。设置淡入淡出度(0.35f);
slidingMenu.SetTouchMode高于(slidingMenu.TOUCHMODE\u全屏);
MenuInflater充气器=getSupportMenuInflater();
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,
WindowManager.LayoutParams.FLAG(全屏);
ActionBar ActionBar=getSherlock().getActionBar();
actionBar.setBackgroundDrawable(新的
可着色(Color.parseColor(#680e96”);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayUseLogoEnabled(false);
actionBar.setHomeButtonEnabled(真);
actionBar.setIcon(R.drawable.logo_图标);
充气机。充气(右菜单。动作栏项目,菜单);
返回super.onCreateOptions菜单(菜单);
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
int itemId=item.getItemId();
if(itemId==android.R.id.home){
切换();
返回true;
}
else if(itemId==R.id.abFeed){
Intent提要=新Intent(this,Home.class);
星触觉(feed);
返回true;
}else if(itemId==R.id.abNotifications){
意向通知=新意向(此为notifications.class);
startActivity(通知);
返回true;
}else if(itemId==R.id.abAddNewItem){
Intent addNewItem=newintent(这个,ItemAdd.class);
startActivity(addNewItem);
返回true;
}else if(itemId==R.id.abSearch){
意向搜索=新意向(此,SearchItems.class);
星触觉(搜索);
返回true;
}否则{
return onOptionsItemSelected(item);//注意这个选项。如果出现任何问题,请更改为“return true”
}
}
公共类BasePagerAdapter扩展了FragmentPagerAdapter{
私有列表MFFragments=newArrayList();
私人寻呼机;
公共BasePagerAdapter(FragmentManager fm、ViewPager vp){
超级(fm);
mPager=vp;
mPager.setAdapter(此);
对于(int i=0;i<3;i++){
添加选项卡(新的RggarbSlidingMenu());
}
}
公共无效添加选项卡(碎片碎片碎片){
mFragments.add(frag);
}
@凌驾
公共片段getItem(int位置){
返回mFragments.get(位置);
}
@凌驾
public int getCount(){
返回mffragments.size();
}
}
@凌驾
public void setBehindContentView(视图视图,LayoutParams LayoutParams){
//TODO自动生成的方法存根
}
@凌驾
public void setBehindContentView(视图){
//TODO自动生成的方法存根
}
@凌驾
public void setBehindContentView(intlayoutresid){
//TODO自动生成的方法存根
}
@凌驾
公共滑动菜单getSlidingMenu(){
//TODO自动生成的方法存根
返回null;
}
@凌驾
公共无效切换(){
//TODO自动生成的方法存根
}
@凌驾
公共内容{
//TODO自动生成的方法存根
}
@凌驾
公共void showMenu(){
//TODO自动生成的方法存根
}
@凌驾
public void showSecondary菜单(){
//TODO自动生成的方法存根
}
@凌驾
public void setSlidingActionBarEnabled(布尔滑动ActionBarEnabled){
//TODO自动生成的方法存根
}
}
您的代码是
@Override
public SlidingMenu getSlidingMenu() {
// TODO Auto-generated method stub
return null;
}
您将从此方法返回null。您应该添加代码以返回应该在其他地方创建的slidingmenu实例(很可能是在活动的OnCreate()方法中创建的)
如果您返回null,那么这正是您将得到的结果
您最好按照github页面上的“”进行操作,而不是实现SlidingActivityBase
界面
通过实现该接口,您表示希望处理滑动菜单系统的所有编码,而不希望使用内置代码
实现接口(您正在做的事情)与扩展基类(您将在下面的教程中解释)是完全不同的
你的选择是:
public class SlidingActivity extends Activity implements SlidingActivityBase {
改为
public class SherlockSlidingActivity extends SherlockFragmentActivity implements SlidingActivityBase {