我一直在按照本教程创建一个滑动菜单:
http://www.youtube.com/watch?v=LWTYQ2g597o
因为我使用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
}
}
答案 0 :(得分:1)
您的代码是
@Override
public SlidingMenu getSlidingMenu() {
// TODO Auto-generated method stub
return null;
}
您将从此方法返回null。您应该添加代码以返回您应该在别处创建的slidemenu实例 (最有可能在您活动的OnCreate()方法中)。
如果你返回null,那就是你将得到的。
您最好在github页面上关注“Simple Example”,而不是实现SlidingActivityBase
界面。
通过实现接口,您说要处理slidemenu系统的所有编码,并且不想使用内置代码。
实现一个接口(你正在做的)与扩展一个基类是完全不同的(你正在遵循的教程中解释了这一点)。
您的选择是:
忘记您找到的教程,因为它不适用于您并使用说明here手动实现滑动菜单。此方法不要求您扩展或实现任何内容,并且是更容易的选择。
您拥有ActionbarSherlock和SlidingMenu的源代码。更改它,以便SlidingActivity扩展Sherlock Activity而不是标准Activity。
继续实现接口,但您必须编写所有已实现方法的代码。比起声音更容易,因为您可以基本上复制类 here 中的代码,并对类声明进行微调。
public class SlidingActivity extends Activity implements SlidingActivityBase {
更改为
public class SherlockSlidingActivity extends SherlockFragmentActivity implements SlidingActivityBase {