Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用SlidingActivityBase和SherlockFragmentActivity创建滑动菜单_Android_Actionbarsherlock_Slidingmenu - Fatal编程技术网

Android 使用SlidingActivityBase和SherlockFragmentActivity创建滑动菜单

Android 使用SlidingActivityBase和SherlockFragmentActivity创建滑动菜单,android,actionbarsherlock,slidingmenu,Android,Actionbarsherlock,Slidingmenu,我一直遵循本教程创建滑动菜单: 因为我使用的是Sherlock,所以我不得不改变我的类声明: public class BaseActivity extends SlidingFragmentActivity 对下列事项: public class RggarbActionBar extends SherlockFragmentActivity implements SlidingActivityBase 现在每当我使用getSlidingMenu()方法时,我都会得到一个NullPo

我一直遵循本教程创建滑动菜单:

因为我使用的是Sherlock,所以我不得不改变我的类声明:

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
界面

通过实现该接口,您表示希望处理滑动菜单系统的所有编码,而不希望使用内置代码

实现接口(您正在做的事情)与扩展基类(您将在下面的教程中解释)是完全不同的

你的选择是:

  • 忘记您找到的教程,因为它不适用于您,并使用说明手动实现您的滑动菜单。此方法不需要您扩展或实现任何内容,是更简单的选择

  • 您拥有和的源代码。将其更改为SlidingActivity扩展Sherlock活动而不是标准活动

  • 继续实现接口,但必须为所有实现的方法编写代码。比听起来更简单,因为您基本上可以复制类中的代码,只需对类声明进行如下微调

    public class SlidingActivity extends Activity implements SlidingActivityBase {
    
    改为

    public class SherlockSlidingActivity extends SherlockFragmentActivity implements SlidingActivityBase {
    
  • 我该怎么回复呢