2014-04-28 37 views
0

我正在實現一個非常簡單的例子NavigationDrawer。這個例子工作正常,但我有一個奇怪的問題。 NavigationDrawer的圖標(通常爲ic_drawer)不會顯示在ActionBar中。我試過使用不同的圖標圖像,但沒有達到預期的效果。這是代碼。該項目只有一個名爲MainActivity.java的活動。NavigationDrawer圖標不顯示

public class MainActivity extends Activity { 

private DrawerLayout mDrawerLayout; 
private ListView mListView; 
private ActionBarDrawerToggle mDrawerToggle; 
private String[] array = new String[] { "Hello", "hola", "namaste", 
     "salaam" }; 

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

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer); 
    mListView = (ListView) findViewById(R.id.list); 

    getActionBar().setDisplayHomeAsUpEnabled(true); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(
      getApplicationContext(), 
      android.R.layout.simple_dropdown_item_1line, array); 
    mListView.setAdapter(adapter); 
    mListView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      Toast.makeText(getApplicationContext(), array[arg2], 
        Toast.LENGTH_SHORT).show(); 

     } 
    }); 

    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, 
      R.drawable.ic_drawer, R.string.open, R.string.close) { 
     @Override 
     public void onDrawerClosed(View drawerView) { 
      // TODO Auto-generated method stub 

      invalidateOptionsMenu(); 
     } 

     @Override 
     public void onDrawerOpened(View drawerView) { 
      // TODO Auto-generated method stub 

      invalidateOptionsMenu(); 
     } 
    }; 
    mDrawerLayout.setDrawerListener(mDrawerToggle); 
} 

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

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // TODO Auto-generated method stub 

    if (mDrawerToggle.onOptionsItemSelected(item)) 
     return true; 
    return super.onOptionsItemSelected(item); 
} 

} 

如果我註釋掉的代碼getActionBar().setDisplayHomeAsUpEnabled(true);行,代碼停止工作,這意味着NavigationDrawer不會打開。

以供參考,該活動的XML佈局:

activity_main.xml中

<android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/drawer" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

    <TextView 
     android:id="@+id/frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="change aaaega, hum laaenge" /> 

    <ListView 
     android:id="@+id/list" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" /> 

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

有什麼建議?

謝謝。

+0

嘗試'getActionBar()setDisplayHomeAsUpEnabled(真); getActionBar()setHomeButtonEnabled(真);' – Euporie

+0

這並沒有解決的問題。如果我想將最低版本的應用程序設置爲API 11而不是14,該怎麼辦? – Rajat

+0

您可以導入android.support.v7,並使用'ActionBarActivity'而不是'Activity'。 'getActionBar()'也應該替換爲'getSupportActionBar()'。 Support.v7只需要API級別7。 – Euporie

回答

1

在程序中包含這部分代碼,

@Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     // Sync the toggle state after onRestoreInstanceState has occurred. 
     mDrawerToggle.syncState(); 
    } 

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


    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     // call mDrawerToggle.onOptionsItemSelected(), if it returns true 
     // then it has handled the app icon touch event 

     if (mDrawerToggle.onOptionsItemSelected(item)) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    }