2016-07-26 8 views
2

私が正常にハンバーガーと矢印の間NavDrawerのアイコンを変更することを決定した、このコードがトグルする必要があります実際に前のアクティビティに戻る場合は、ナビゲーションドロワーを開きます。DrawerLayout戻るアロー機能

私は単純にonClickListenerを設定することができますが、Androidは以前の画面にナビゲートするよりネイティブな方法があると考えました。ここに私のコードは次のとおりです。」

のonCreate:

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    mDrawerToggle = new ActionBarDrawerToggle(
      this,     /* host Activity */ 
      mDrawerLayout,   /* DrawerLayout object */ 
      toolbar, /* nav drawer icon to replace 'Up' caret */ 
      R.string.drawer_open, /* "open drawer" description */ 
      R.string.drawer_close /* "close drawer" description */ 
    ) { 

     /** 
     * Called when a drawer has settled in a completely closed state. 
     */ 
     public void onDrawerClosed(View view) { 
      super.onDrawerClosed(view); 
      isOpen = false; 
     } 

     /** 
     * Called when a drawer has settled in a completely open state. 
     */ 
     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
      isOpen = true; 
     } 
    }; 
    mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      onBackPressed(); 
     } 
    }); 
    mDrawerToggle.setDrawerIndicatorEnabled(false); 
    mDrawerLayout.addDrawerListener(mDrawerToggle); 

    mDrawerList = (ListView) findViewById(R.id.left_drawer); 
    ArrayList<String> drawerTitleArray = new ArrayList<>(); 
    drawerTitleArray.add(0, "TEST"); 
    drawerTitleArray.add(1, "TEST 1"); 
    // Set the adapter for the list view 
    mDrawerList.setAdapter(new ArrayAdapter<String>(this, 
      R.layout.drawer_list_item, drawerTitleArray)); 


     // TODO: Add Fragment Code to check if savedInstanceState ==         null; add at Activity Level? 
    // Check that the activity is using the layout version with 
    // the fragment_container FrameLayout 


    //set up viewpager for current day 
    //mPager = (ViewPager)    findViewById(R.id.home_polls_viewpager_fragment_container); 
    //mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager()); 
    //mPager.setAdapter(mPagerAdapter); 


    //get current date to apply to Viewpager 
    mDateFormat = new SimpleDateFormat("MM-dd-yyyy"); 
    mDate = new Date(); 
    mCurrentDateString = mDateFormat.format(mDate); 
    mViewPager = (ViewPager) findViewById(R.id.poll_fragment_container); 
    mViewPager.setAdapter(new SectionPagerAdapter(getSupportFragmentManager())); 
    mTabLayout.setupWithViewPager(mViewPager); 

    // TODO: Checkn if AuthStateListenerNecessary 
    //Determine whether necessary to use an AuthStateListener here 
    // mUserRef.addAuthStateListener(new Firebase.AuthStateListener() { 
    //@Override 
    //public void onAuthStateChanged(AuthData authData) { 
    //if (authData == null) { 
    //Intent backToSignIn = new Intent(getApplication(),  SignupActivity.class); 
    //startActivity(backToSignIn); 
    //     finish(); 
    //    } 
    //   } 
    //  }) 




} 

@Override 
protected void onStart() { 
    super.onStart(); 

    v = new ValueEventListener() { 
     //testing methodology of adding children 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      int pollsAvailable = (int) dataSnapshot.child(mCurrentDateString).getChildrenCount(); 
     //    mPagerAdapter.setPollsAvailable(pollsAvailable); 
      Log.i("TAG", "There are " + String.valueOf(pollsAvailable) + " children in today's poll count."); 
     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 

     } 
    }; 

    mPollsRef.addValueEventListener(v); 

} 

@Override 
protected void onStop() { 
    super.onStop(); 
    mPollsRef.removeEventListener(v); 

} 

@Override 
public void onFragmentInteraction(Uri uri) { 

} 

@Override 
public boolean onOptionsItemSelected(MenuItem item){ 
    if (item.getItemId() == android.R.id.home){ 
     super.onBackPressed(); 
     return true;} 
    else 
     return mDrawerToggle.onOptionsItemSelected(item) || super.onOptionsItemSelected(item); 
} 



@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    //TODO: Be sure to only allow one instance of each activity 
    //TODO:Address mDrawerToggle code from StackOverflow to make sure I am correctly implementing the return to previous activity 
    // Sync the toggle state after onRestoreInstanceState has occurred. 
    //  mDrawerToggle.syncState(); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    mDrawerToggle.onConfigurationChanged(newConfig); 
} 

public class SectionPagerAdapter extends FragmentPagerAdapter { 

    public SectionPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     int pollIndex = mIntentFromTouch.getIntExtra("Poll_Index",0); 
     switch (position) { 
      case 0: 
       PollFragment pollFragment = PollFragment.newInstance(pollIndex); 
       return pollFragment; 
      case 1: 
       DiscussionFragment discussionFragment = DiscussionFragment.newInstance(pollIndex); 
       return discussionFragment; 
      default: 
       return new PollFragment(); 
     } 
    } 

    @Override 
    public int getCount() { 
     return 2; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: 
       return getResources().getString(R.string.poll_text); 
      case 1: 
       return getResources().getString(R.string.discussion_text); 
      default: 
       return getResources().getString(R.string.poll_text); 
     } 
     } 
    } 


} 

答えて

1

実は、syncState()方法はトグルの画像は、引き出しとの整合状態にあることを保証し、かつToolbar/ActionBar上に画像を設定します。ドロワ/バック機能を切り替えることはありません。

setDrawerIndicatorEnabled()の方法がお探しのものです。インジケータが有効になると、トグルがドロワを操作します。無効にすると、ナビに戻ります。OnClickListener(設定済みの場合)

mDrawerToggle.setHomeAsUpIndicator(R.drawable.abc_ic_ab_back_mtrl_am_alpha); 
mDrawerToggle.setToolbarNavigationClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      onBackPressed(); 
     } 
    } 
); 

を次に、あなたは引き出しの操作を無効にし、戻ってトグルをクリックすることができ、簡単に呼び出したいとき:トグルのセットアップに以下を追加し、バックの機能を処理するために

mDrawerToggle.setDrawerIndicatorEnabled(false); 

私はまた、あなたがToolbar引数を取るActionBarDrawerToggleコンストラクタを使用していたので、トグルをクリックすると、ActivityさんonOptionsItemSelected()メソッドが呼び出されることはありません、ということを指摘し、目のでしょうe mDrawerToggle.onOptionsItemSelected(item)ここではコールは必要ありません。


NB:あなたが使用しているサポートライブラリのバージョンに応じて、バックはDrawableリソース矢印は、指定される可能性がありますR.drawable.abc_ic_ab_back_material代わりに。詳細については、this postを参照してください。

+0

ありがとうございました!私はそれを撃つだろう。そのドロアブルはAndroid SDKに含まれていますか? – tccpg288

+0

サポートライブラリに含まれています。 –

+0

ああ、実際には、ライブラリのバージョンによっては、別の名前である可能性があります: 'R.drawable.abc_ic_ab_back_material'。 [this post](http://stackoverflow.com/questions/35632576/error-cannot-find-symbol-variable-abc-ic-ab-back-mtrl-am-alpha)を見てください。私はここで私の答えを1分で修正します。 –

関連する問題