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