2013-07-24 16 views
19

Tôi đang cố gắng sử dụng DrawerLayout mới cho danh sách. Vấn đề là mặc dù tôi đặt người nghe ngăn kéo, chỉ báo trên thanh tác vụ vẫn là biểu tượng mũi tên thay vì biểu tượng 3 dòng mà tôi dự định vẽ. Sau đây là chức năng OnCreate:Android DrawerLayout không hiển thị biểu tượng chỉ báo bên phải

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_front_page); 

    // Swiping Pager set up 
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 

    // Sliding Drawer set up 
    mHabitContract = new HabitsContract(this); 
    mDrawerLayout = (DrawerLayout) findViewById(R.id.front_page_layout); 
    mDrawerList = (ListView) findViewById(R.id.habit_list); 
    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 
    mDrawerList.setAdapter(new HabitAdapter(mHabitContract.GetHabitItems(), this)); 

    // Fixme: Indicator image doesn't show up 
    mDrawerToggle = new ActionBarDrawerToggle(
      this,     /* host Activity */ 
      mDrawerLayout,   /* DrawerLayout object */ 
      R.drawable.ic_navigation_drawer, /* nav drawer image to replace 'Up' caret */ 
      R.string.drawer_open, /* "open drawer" description for accessibility */ 
      R.string.drawer_close /* "close drawer" description for accessibility */ 
    ) { 
     public void onDrawerClosed(View view) { 
      //getActionBar().setTitle(mTitle); 
      invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
     } 

     public void onDrawerOpened(View drawerView) { 
      //getActionBar().setTitle(mDrawerTitle); 
      invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
     } 
    }; 
    mDrawerLayout.setDrawerListener(mDrawerToggle); 

    // Action Bar set up 
    getActionBar().setDisplayHomeAsUpEnabled(true); 
    getActionBar().setHomeButtonEnabled(true); 
    getActionBar().setDisplayShowHomeEnabled(true); 
} 

Có ai giúp được không?

Cập nhật: Tôi đã tìm thấy sự cố. Tôi đã thêm hàm onPostCreate như sau, và bây giờ nó hoạt động.

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

http://www.coderzheaven.com/2013/06/28/navigation-drawer-android/ –

+0

Tôi đã tải xuống ứng dụng mẫu, chạy hoàn toàn tốt. Nhưng mã của tôi gần như giống hệt nhau, vì vậy tôi không thực sự biết vấn đề là gì. – zhengbli

+0

cố gắng lấy mã từ ứng dụng đã tải xuống đó vào mã của bạn và thay đổi theo yêu cầu của bạn. –

Trả lời

35

Bạn cần phải syncState() tiếng gọi của đối tượng ActionBarDrawerToggle của bạn từ onPostCreate()

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

Có cùng một vấn đề - dễ bị bỏ qua – Deminetix

+0

Đây phải là câu trả lời được chấp nhận – serenskye

+0

Cảm ơn! Tôi có thể giải quyết vấn đề. – Ataru

0

Biểu tượng bạn đang sử dụng được gọi là "ic_navigation_drawer". Bạn có thể kiểm tra xem đó có phải là biểu tượng thích hợp không vì biểu tượng Google cung cấp trong hướng dẫn chính thức (http://developer.android.com/training/implementing-navigation/nav-drawer.html) được gọi là "ic_drawer".

+1

Tôi đã thử cả hai, không hoạt động. Ngoài ra, ngăn kéo không mở khi tôi chạm vào biểu tượng mũi tên. Nhưng các hàm onDrawerClosed/onDrawerOpened hoạt động trong thử nghiệm của tôi. – zhengbli

0

Ngoài ra kiểm tra cẩn thận nếu tùy chỉnh ActionBar chủ đề được xác định vào dự án của bạn trong style.xml tập tin với điều kiện android:displayOptions=showTitle. Như thế này:

<style name="OrangeBar" parent="@android:style/Widget.Holo.ActionBar"> 
    <item name="android:displayOptions">showTitle</item> 
    ... 
</style> 

và nó có thể làm hỏng chỉ báo ngăn kéo. Để tránh điều này thêm showHome tại android:displayOptions:

<item name="android:displayOptions">showHome|showTitle</item> 
3

Đối với những người đang tìm kiếm này hay đến đây tìm kiếm một câu trả lời: bạn phải sử dụng để DrawerToggle support.v7. Theo cách tôi sử dụng:

drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_opened, R.string.drawer_closed){ 
     public void onDrawerClosed(View view){ 
      //actionBar.setTitle(mTitle); 
      invalidateOptionsMenu(); // crea la llamada para onPrepareOptionsMenu 
     } 
     public void onDrawerOpened(View view){ 
      //actionBar.setTitle(mDrawerTitle); 
      invalidateOptionsMenu(); // crea la llamda para onPrepareOptionsMenu 
     } 
    }; 

Điều này hoạt động tốt và có hoạt ảnh đá!

+0

đây phải là câu trả lời mới hàng đầu –

Các vấn đề liên quan