2016-05-06 11 views
0

同様の質問が表示されましたが、答えは役に立たないです。それが私が投稿する理由です。 引き出しをFragmentDrawer.javaに設定する方法は次のとおりです。ナビゲーション・ドロワーのトグル・ボタンが初めて機能しない

public void setUp(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) { 
    containerView = getActivity().findViewById(fragmentId); 
    mDrawerLayout = drawerLayout; 
    toolBar = toolbar; 
    onDrawerOpen(); 
    mDrawerToggle.setDrawerIndicatorEnabled(false); 
    mDrawerToggle.setHomeAsUpIndicator(R.drawable.drawer); 
    mDrawerLayout.setDrawerListener(mDrawerToggle); 
    mDrawerLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      mDrawerToggle.syncState(); 
     } 
    }); 
    mDrawerToggle.setToolbarNavigationClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      onDrawerOpen(); 
     } 
    }); 
} 

ここにはonDrawerOpenメソッドがあります。

private void onDrawerOpen() { 
    mDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, 
      toolBar, R.string.drawer_open, R.string.drawer_close) { 
     @Override 
     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
      getActivity().invalidateOptionsMenu(); 
     } 

     @Override 
     public void onDrawerClosed(View drawerView) { 
      super.onDrawerClosed(drawerView); 
      getActivity().invalidateOptionsMenu(); 
     } 

     @Override 
     public void onDrawerSlide(View drawerView, float slideOffset) { 
      super.onDrawerSlide(drawerView, slideOffset); 
      toolBar.setAlpha(1 - slideOffset/2); 
     } 
    }; 
} 

そしてMainActivityからこのように呼び出します。

drawerFragment.setUp(R.id.fragment_navigation_drawer, mDrawer, mToolbar); 

答えて

1

あなたが最初onDrawerOpen()を呼び出すことによってActionBarDrawerToggleを初期化したら、インジケータを無効にし、任意のクリックがナビゲーションクリックリスナーにルーティングする原因となる、setDrawerIndicatorEnabled(false)を呼び出します。最初のクリック時にonDrawerOpen()が再度呼び出され、トグルが再初期化され、次に正常に動作します。

それはあなたが何をしようとしているまさに不明確だが、あなただけの標準的なトグル動作をしたい場合は、setup()方法にトグルの初期化を移動し、setDrawerIndicatorEnabled()setToolbarNavigationClickListener()呼び出しを削除します。

public void setUp(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) { 
    containerView = getActivity().findViewById(fragmentId); 
    mDrawerLayout = drawerLayout; 
    toolBar = toolbar; 

    mDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, 
               toolBar, R.string.drawer_open, 
               R.string.drawer_close) { 
     @Override 
     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
      getActivity().invalidateOptionsMenu(); 
     } 

     @Override 
     public void onDrawerClosed(View drawerView) { 
      super.onDrawerClosed(drawerView); 
      getActivity().invalidateOptionsMenu(); 
     } 

     @Override 
     public void onDrawerSlide(View drawerView, float slideOffset) { 
      super.onDrawerSlide(drawerView, slideOffset); 
      toolBar.setAlpha(1 - slideOffset/2); 
     } 
    }; 

    mDrawerToggle.setHomeAsUpIndicator(R.drawable.drawer); 
    mDrawerLayout.setDrawerListener(mDrawerToggle); 
    mDrawerLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      mDrawerToggle.syncState(); 
     } 
    }); 
} 
+0

ヤップ、@マイク、このコードは私が書いたものではありません。私はあなたの答えを試し、あなたの質問を正しいものにしよう。 –

関連する問題