0

このチュートリアルに従って、スライド メニューを作成しました。

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

私は Sherlock を使用しているため、クラス宣言を次のように変更する必要がありました。

public class BaseActivity extends SlidingFragmentActivity 

以下に:

public class RggarbActionBar extends SherlockFragmentActivity implements SlidingActivityBase 

そして今、クラス内で空のままでnullを返すgetSlidingMenu()メソッドを使用するたびに、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

    }
}
4

1 に答える 1

1

あなたのコードは

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

このメソッドから null を返しています。コードを追加して、別の場所(アクティビティの OnCreate() メソッドで作成する可能性が最も高い) に作成する必要があるslidingmenu インスタンスを返す必要があります。

null を返すと、まさにそれが得られます。

インターフェイスを実装するよりも、github ページの「簡単な例」に従う方がよいでしょうSlidingActivityBase

インターフェイスを実装することで、slingmenu システムのすべてのコーディングを処理したいが、組み込みコードを使用したくないということになります。

インターフェースの実装 (あなたがしていること) は、基本クラスの拡張 (あなたがフォローしているチュートリアルで説明されていること) とはまったく別のものです。

選択肢は次のとおりです。

  1. 見つけたチュートリアルは自分には当てはまらないので忘れて、こちらの手順に従ってスライド メニューを手動で実装してください。この方法では、何も拡張または実装する必要がなく、より簡単なオプションです。

  2. ActionbarSherlockSlidingMenuの両方のソース コードがあります。SlidingActivity が標準アクティビティではなく Sherlock アクティビティを拡張するように変更します。

  3. インターフェイスの実装を続行しますが、実装されたすべてのメソッドのコードを記述する必要があります。基本的に、このようにクラス宣言を微調整して、クラスのコードをここにコピーできるので、思ったより簡単です。

    public class SlidingActivity extends Activity implements SlidingActivityBase {
    

    への変更

    public class SherlockSlidingActivity extends SherlockFragmentActivity implements SlidingActivityBase {
    
于 2013-10-13T15:14:38.973 に答える