2017-05-31 159 views
0

我有一個工作導航抽屜,但我改變了工具欄,現在navigationdrawer的圖標停止工作。將抽屜拉出後再次工作。這是相關代碼:Android導航抽屜圖標不工作

MainActivity.java

//Drawer and fragments variables 
private FragmentManager fragmentManager; 
private ActionBarDrawerToggle toggle; 
private DrawerLayout drawer; 

//Searchbar variables 
private Toolbar toolbar, searchtollbar; 
private Menu search_menu; 
private MenuItem item_search; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    //Setup toolbar 
    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    setSearchtollbar(); 

    //Setup navigationdrawer 
    drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    drawer.addDrawerListener(toggle); 
    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 
    navigationView.getMenu().getItem(0).setChecked(true); 

    //Setup fragments 
    fragmentManager = getSupportFragmentManager(); 
    try{ 
     fragmentManager.beginTransaction().replace(R.id.container, HomeFragment.class.newInstance()).commit(); 
    }catch(Exception e){ 
     handleError(e); 
    } 
} 

@Override 
public void onBackPressed() { 
    drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else { 
     super.onBackPressed(); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
protected void onPostCreate(Bundle savedInstanceState){ 
    super.onPostCreate(savedInstanceState); 
    toggle.syncState(); 
} 

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

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    //noinspection SimplifiableIfStatement 
    Log.i("TAG", "Item clicked: "+item.getItemId()); 
    if (toggle.onOptionsItemSelected(item)) { 
     return true; 
    } 
    switch(item.getItemId()){ 
     case R.id.action_settings:{ 
      Intent intent = new Intent(this, SettingsActivity.class); 
      startActivity(intent); 
      return true; 
     } 
    } 
    return super.onOptionsItemSelected(item); 
} 

@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 
    Log.i("TAG", "Navigation item clicked: " + id); 
    Class fragmentClass; 
    Fragment fragment = null; 

    switch(id) { 
     ... 
    } 

    try { 
     fragment = (Fragment) fragmentClass.newInstance(); 
    } catch (Exception e) { 
     handleError(e); 
    } 

    fragmentManager = getSupportFragmentManager(); 
    fragmentManager.beginTransaction().replace(R.id.container, fragment).commit(); 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 

main_activity.xml

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:openDrawer="start"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
     <include 
      android:id="@+id/toolbar" 
      layout="@layout/app_bar_main"/> 
     <include layout="@layout/app_bar_main_search" 
      android:visibility="invisible"/> 
     <include 
      layout="@layout/main_layout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_below="@id/toolbar"/> 
    </RelativeLayout> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/nav_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:fitsSystemWindows="true" 
     android:visibility="gone" 
     app:headerLayout="@layout/nav_header_main" 
     app:menu="@menu/activity_main_drawer" /> 

</android.support.v4.widget.DrawerLayout> 

現在我的問題是:

  • 爲什麼不漢堡包圖標工作第一次?
  • 爲什麼在將導航抽屜拉出後開始工作?

在此先感謝。

+0

發佈您的代碼爲'setSearchtollbar();'方法請。 – Ibrahim

+1

這樣做是因爲您已將佈局中的'NavigationView'的'visibility'設置爲'gone'。鏈接副本上的答案解釋了行爲,但基本上解決方案是刪除該屬性 - 「android:visibility =」gone「'。 –

回答

0

設置抽屜添加監聽切換同步和檢查

drawer.addDrawerListener(toggle); 
toggle.syncState(); 
+0

我已經在onPostCreate中執行此操作。添加這個不會改變它。 – user2988879

+0

使用android studio新增功能檢查>>導航抽屜活動,您將會知道問題 – Pavan

0

使用此代碼後:

 
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, mDrawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 

toggle.setDrawerIndicatorEnabled(false); //disable "hamburger to arrow" drawable 
     toggle.setHomeAsUpIndicator(R.drawable.menu); //set your own 

     // setting click listener on hamburger icon 
     toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mDrawerLayout.openDrawer(Gravity.START); 
       } 
      } 
     }); 

     // setting listerner on drawer 
     mDrawerLayout.addDrawerListener(toggle); 
     toggle.syncState();
+0

感謝您的評論,但使用此代碼不會改變任何情況。該按鈕僅在通過滑動打開抽屜後才起作用。 – user2988879

+0

是的,我可以在OP中看到。 – user2988879

+0

結果可悲地保持不變 – user2988879