Android 抽屉图标在打开时不会变为箭头

Android 抽屉图标在打开时不会变为箭头,android,android-fragments,navigation-drawer,drawertoggle,Android,Android Fragments,Navigation Drawer,Drawertoggle,我只是在学习安卓系统:安卓书,在第10章:抽屉中,它展示了如何创建和处理抽屉,我遵循了所有的方法,但正如书中所示,一旦用户打开抽屉,汉堡图标应该会变成一个后箭头,我的抽屉就会打开,点击效果良好,唯一的一点是,图标不会变为后箭头,即使我打开抽屉,它仍保持为汉堡图标,以下是我的代码: public class MainActivity extends Activity { private String[] titles; private ListView drawerList; private S

我只是在学习安卓系统:安卓书,在第10章:抽屉中,它展示了如何创建和处理抽屉,我遵循了所有的方法,但正如书中所示,一旦用户打开抽屉,汉堡图标应该会变成一个后箭头,我的抽屉就会打开,点击效果良好,唯一的一点是,图标不会变为后箭头,即使我打开抽屉,它仍保持为汉堡图标,以下是我的代码:

public class MainActivity extends Activity {

private String[] titles;
private ListView drawerList;
private ShareActionProvider shareActionProvider;
private DrawerLayout drawerLayout;
private ActionBarDrawerToggle drawerToggle;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    titles = getResources().getStringArray(R.array.titles);
    drawerList = (ListView) findViewById(R.id.drawer);
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawerList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_activated_1, titles));
    drawerList.setOnItemClickListener(new DrawerItemClickListener());
    if(savedInstanceState == null){
        selectItem(0);
    }
    drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.open_drawer, R.string.close_drawer){
        public void onDrawerClosed(View view){
            super.onDrawerClosed(view);
            invalidateOptionsMenu();
        }
        public void onDrawerOpened(View view){
            super.onDrawerOpened(view);
            invalidateOptionsMenu();
        }
    };
    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setHomeButtonEnabled(true);
}

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

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



@Override
public boolean onPrepareOptionsMenu(Menu menu){
    boolean drawerOpen = drawerLayout.isDrawerOpen(drawerList);
    menu.findItem(R.id.action_share).setVisible(!drawerOpen);
    return super.onPrepareOptionsMenu(menu);
}

@Override
public boolean onCreateOptionsMenu(Menu menu){
    getMenuInflater().inflate(R.menu.menu_main, menu);
    MenuItem menuItem = menu.findItem(R.id.action_share);
    shareActionProvider = (ShareActionProvider) menuItem.getActionProvider();
    setIntent("Text");
    return super.onCreateOptionsMenu(menu);
}
private void setIntent(String text){
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("text/plain");
    intent.putExtra(Intent.EXTRA_TEXT, text);
    shareActionProvider.setShareIntent(intent);
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
    if(drawerToggle.onOptionsItemSelected(item)){
        return true;
    }
    switch (item.getItemId()){
        case R.id.action_create_order:
            Intent intent = new Intent(this, OrderActivity.class);
            startActivity(intent);
            return true;
        case R.id.action_settings:
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

private class DrawerItemClickListener implements ListView.OnItemClickListener{
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id){
        selectItem(position);
    }
}
private void selectItem(int position){
    Fragment fragment;
    switch (position){
        case 1:
            fragment = new PizzaFragment();
            break;
        case 2:
            fragment = new PastaFragment();
            break;
        case 3:
            fragment = new StoresFragment();
            break;
        default:
            fragment = new TopFragment();
    }
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.content_frame, fragment);
    ft.addToBackStack(null);
    ft.setTransition(FragmentTransaction.TRANSIT_ENTER_MASK);
    ft.commit();
    setActionBarTitle(position);
    drawerLayout.closeDrawer(drawerList);
}

private void setActionBarTitle(int position){
    String title;
    if(position == 0){
        title = getResources().getString(R.string.app_name);
    }else{
        title = titles[position];
    }
    getActionBar().setTitle(title);
}
公共类MainActivity扩展活动{
私有字符串[]标题;
私有列表视图抽屉列表;
私有ShareActionProvider ShareActionProvider;
私人抽屉布局;
私人诉讼律师事务所;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
titles=getResources().getStringArray(R.array.titles);
抽屉列表=(列表视图)findViewById(R.id.drawer);
抽屉布局=(抽屉布局)findViewById(R.id.抽屉布局);
setAdapter(新的ArrayAdapter(这个,android.R.layout.simple_list_item_activated_1,titles));
setOnItemClickListener(新的DroperItemClickListener());
如果(savedInstanceState==null){
选择项目(0);
}
DroperToggle=new ActionBarDrawerToggle(此,抽屉布局,R.string.open\u抽屉,R.string.close\u抽屉){
公共无效onDrawerClosed(视图){
super.onDrawerClosed(视图);
无效操作菜单();
}
已打开的公共空间(视图){
super.onDrawerOpened(视图);
无效操作菜单();
}
};
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
}
@凌驾
后期创建时受保护的空(捆绑包savedInstanceState){
super.onPostCreate(savedInstanceState);
drawerToggle.syncState();
}
@凌驾
公共无效OnConfiguration已更改(配置newConfig){
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}
@凌驾
公共布尔值OnPrepareOptions菜单(菜单){
布尔抽屉链接=抽屉布局.isDrawerOpen(抽屉列表);
menu.findItem(R.id.action\u share).setVisible(!drawerropen);
返回super.onPrepareOptions菜单(菜单);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(右菜单菜单菜单主菜单);
MenuItem MenuItem=menu.findItem(R.id.action\u share);
shareActionProvider=(shareActionProvider)menuItem.getActionProvider();
设定意图(“文本”);
返回super.onCreateOptions菜单(菜单);
}
私有void setIntent(字符串文本){
意向意向=新意向(意向.行动\发送);
intent.setType(“文本/普通”);
intent.putExtra(intent.EXTRA_TEXT,TEXT);
shareActionProvider.SetShareContent(意图);
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
如果(抽屉切换选项项选定(项目)){
返回true;
}
开关(item.getItemId()){
案例R.id.行动\创建\订单:
意向意向=新意向(此,OrderActivity.class);
星触觉(意向);
返回true;
案例R.id.action\u设置:
返回true;
违约:
返回super.onOptionsItemSelected(项目);
}
}
私有类DrawerItemClickListener实现ListView.OnItemClickListener{
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
选择项目(位置);
}
}
私有void selectItem(内部位置){
片段;
开关(位置){
案例1:
fragment=新的PizzaFragment();
打破
案例2:
片段=新的PastaFragment();
打破
案例3:
fragment=newstoresFragment();
打破
违约:
fragment=新的TopFragment();
}
FragmentTransaction ft=getFragmentManager().beginTransaction();
ft.replace(R.id.content\u frame,fragment);
ft.addToBackStack(空);
ft.setTransition(FragmentTransaction.transition\u ENTER\u MASK);
ft.commit();
setActionBarTitle(位置);
抽屉布局。封闭抽屉(抽屉列表);
}
私有无效setActionBarTitle(内部位置){
字符串标题;
如果(位置==0){
title=getResources().getString(R.string.app_name);
}否则{
头衔=头衔[职位];
}
getActionBar().setTitle(标题);
}

}初始化抽屉开关后,设置抽屉侦听器,以便:

drawerLayout.setDrawerListener(drawerToggle);

您的ActionBarDrawerToggle来自android.support.v4.app.ActionBarDrawerToggle或android.support.v7.app.ActionBarDrawerToggle?它应该是android.support.v7.app.ActionBarDrawerToggle它不会自动工作。按照这里的说明操作-我正在使用v7:import android.support.v7.app.ActionBarDrawerToggle;