2013-10-13 30 views
0

我一直在關注這個教程創建一個滑動菜單:同時使用SlidingActivityBase和SherlockFragmentActivity創建一個滑動菜單

http://www.youtube.com/watch?v=LWTYQ2g597o

而且因爲即時通訊使用大偵探,我必須從這個改變我的類聲明:

public class BaseActivity extends SlidingFragmentActivity 

以下幾點:

public class RggarbActionBar extends SherlockFragmentActivity implements SlidingActivityBase 

現在,當我使用getSlidingMenu()方法在我的類中保持爲空,並返回null時,我得到一個NullPointerException。

這裏是我的全班同學:

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 

    } 
} 

回答

1

你的代碼是

@Override 
public SlidingMenu getSlidingMenu() { 
    // TODO Auto-generated method stub 
    return null; 
} 

你從這個方法返回null。您應該添加代碼以返回您應該在其他地方創建的slidingmenu實例(很可能在您的活動的OnCreate()方法中)。

如果你返回null,那正是你將會得到的。

你應該更好地遵循github頁面上的「Simple Example」而不是實現SlidingActivityBase接口。

通過實現接口,你說你想要處理slidingmenu系統的所有編碼,而不想使用內置的代碼。

實現一個接口(你在做什麼)是擴展一個基類的完全不同的東西(你在接下來的教程中解釋了什麼)。

你的選擇是:

  1. 忘記教程中,你已經找到,因爲它並不適用於你和使用說明here手動實現你的滑動菜單。這種方法不需要你擴展或實現任何東西,並且是更簡單的選擇。

  2. 您有源代碼ActionbarSherlockSlidingMenu。改變它,所以SlidingActivity擴展了Sherlock活動,而不是標準的活動。

  3. 繼續實現接口,但必須爲所有實現的方法編寫代碼。比聽起來容易,因爲基本上可以複製here中的代碼,並對類聲明進行小調整。

    public class SlidingActivity extends Activity implements SlidingActivityBase { 
    

    變化

    public class SherlockSlidingActivity extends SherlockFragmentActivity implements SlidingActivityBase { 
    
+0

我怎麼retrurn該實例 –

+0

有關使用該庫已經在GitHub的頁面上完全記錄。 – Kuffs

+0

以及我已閱讀說明,仍然問這個問題,所以 –