2015-04-17 88 views
0

我一直在試圖使目前使用ActionBarActivity的向上按鈕了幾個小時我的抽屜式導航欄打開,但我似乎無法工作了。Android的動作條上按鈕無法打開抽屜式導航

現在,我可以通過滑動/向右滑動打開它,我可以看到箭頭Up /後退的動作條按鈕,但導航無法打開抽屜,一旦我輕點按鈕。

請注意,我使用的是支持V7 ActionBarDrawerToggle

這裏是我的ActionBarActivity的onCreate

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

    if (savedInstanceState == null) { 
     getFragmentManager().beginTransaction() 
       .add(R.id.container, new HomeFragment()) 
       .commit(); 
    } 

    Log.d(TAG, "onCreate"); 

    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setHomeButtonEnabled(true); 
    mDrawerLayout = (DrawerLayout) findViewById(R.id.main_drawer_layout); 
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close); 
    mDrawerLayout.setDrawerListener(mDrawerToggle); 
    mDrawerToggle.setDrawerIndicatorEnabled(true); 
} 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    Log.d(TAG, "onPostCreate"); 
    mDrawerToggle.syncState(); 
} 

我缺少的東西?也許有一個方法調用將ActionBar的Up/Back按鈕鏈接到DrawerToggle?

任何幫助/指導是很好的讚賞。

更新:我也試過使用mDrawerToggle.syncState();,沒有任何改變。更新上面的onCreate方法以包含syncState調用。

更新2:我再次更新了代碼,以便它如何在我的MainActivity文件中保持當前狀態。我按照建議進行了一些更改,但抽屜仍然無法打開。

我在兩個設備測試這樣的:是HTC One M7採用Android 5.0.2和Sense 6.5,在x86模擬器AVD運行棒棒糖SDK 21

回答

3

處理看看第一:

public class HomeActivity extends ActionBarActivity implements 
    DrawerCloseListener { 
private Toolbar toolbar; 
private DrawerLayout drawer; 
private ActionBarDrawerToggle drawerToggle; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_home); 
    toolbar = (Toolbar) findViewById(R.id.home_toolbar); 
    toolbar.setNavigationIcon(R.drawable.icon_nav); 
    setSupportActionBar(toolbar); 
    drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawerToggle = new ActionBarDrawerToggle(this, drawer, toolbar, 
      R.string.app_name, R.string.app_name); 
    drawerToggle.setHomeAsUpIndicator(R.drawable.icon_nav); 
    drawer.setDrawerListener(drawerToggle); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (drawerToggle.onOptionsItemSelected(item)) { 
     return true; 
    } 
    // 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. 
    return super.onOptionsItemSelected(item); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    // TODO Auto-generated method stub 
    super.onConfigurationChanged(newConfig); 
    drawerToggle.onConfigurationChanged(newConfig); 
} 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onPostCreate(savedInstanceState); 
    drawerToggle.syncState(); 
} 

@Override 
public void onBackPressed() { 
    // TODO Auto-generated method stub 
    if (drawer.isDrawerOpen(Gravity.LEFT | Gravity.START)) { 
     drawer.closeDrawers(); 
     return; 
    } 
    super.onBackPressed(); 
} 

@Override 
public void onDrawerClose() { 
    // TODO Auto-generated method stub 
    if (drawer.isDrawerOpen(Gravity.LEFT | Gravity.START)) { 
     drawer.closeDrawers(); 
    } 
} 
} 

和代碼之間以上,我通過ToolBar取代ActionBar,但你仍然可以使用ActionBar那裏是一個ToolBar。你錯過了什麼?

+0

如果不使用工具欄替換默認的ActionBar,不能做到這一點嗎?這可能會起作用,但看起來很簡單的任務似乎太乏味了。如果我不能在不更換默認ActionBar的情況下完成這項工作,我會試試這個。不管怎樣,謝謝你!如果這有效,我會告訴你。 – Cramps

+0

'ToolBar'是'ActionBar'的泛化。在哪裏可以使用'ActionBar',你可以使用'ToolBar'。 – SilentKnight

+0

我剛完成實施它的「工具欄方式」,它的工作原理如下。謝謝! :) – Cramps

0

您需要同步您的抽屜切換,以便拿到了按鈕,以及... :)同步

mDrawerToggle.syncState();

+0

我想這不久問這個問題之前,它沒有工作,要麼對象。我很抱歉!我錯過了將它添加到上面的'onCreate'代碼中,因爲我在嘗試之後取消了更改。我會更新我的問題。 – Cramps

+0

你有沒有試過把'.syncState()'移動到'onPostExecute()'http://stackoverflow.com/a/20655364/3474528 –

+0

我想你的意思是'onPostCreate'?我只是試過,沒有任何改變。我不明白這裏有什麼問題。 – Cramps

0

我想你應該添加

mDrawerToggle.setDrawerIndicatorEnabled(true); 

和移動這條線mDrawerLayout.setDrawerListener(mDrawerToggle);mDrawerToggle = new ActionBarDrawerToggle(...);

編輯:在我的代碼後,我再次檢查了我的代碼,關閉和打開在單獨的方法

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case android.R.id.home: 
     if(mDrawerLayout.isDrawerOpen(drawerList)) { 
      mDrawerLayout.closeDrawer(drawerList); 
     } 
     else { 
      mDrawerLayout.openDrawer(drawerList); 
     } 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 
+0

我移動了行,並在之後添加了'setDrawerIndicatorEnabled(true)',但沒有什麼不同。我將用我當前的代碼更新這個問題。 – Cramps

+0

這是一個好主意,但是當我刪除這些行時,ActionBar中的抽屜圖標就完全消失了!你是怎麼把DrawerToggle的圖標添加到ActionBar的? – Cramps

+0

你的意思是左箭頭圖標?通過調用mDrawerToggle.setDrawerIndicatorEnabled(true);如果您使用白色或黑色背景,該圖標可能會被掩蓋,因爲它也是白色或黑色(取決於主題)。或者你也可以將它設置爲false,並使用mDrawerToggle.setHomeAsUpIndicator(R.drawable.custom_icon);使用您自己的自定義圖標。 – inmyth

0

您需要更改的兩行順序:

1.

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close); 

然後2。

mDrawerLayout.setDrawerListener(mDrawerToggle); 

由於在設置setDrawerListenermDrawerToggle未初始化

希望這將解決你的工作

+0

我沒有切換線路,但沒有工作。我將用我當前的代碼更新這個問題! – Cramps