【问题标题】:Drawer icon not changing to the arrow when opened打开时抽屉图标未变为箭头
【发布时间】:2015-09-14 18:35:29
【问题描述】:

我只是按照 Head First:Android 书,第 10 章:Drawers 学习 Android,它展示了如何创建和处理 Drawer,我遵循了所有内容,但正如书中显示的那样,一旦用户打开 Drawer,汉堡包图标就是应该更改为后退箭头,我的抽屉打开并且点击工作正常,唯一的是图标不会更改为后退箭头,即使我打开抽屉,它仍然是汉堡包图标,这是我的代码:

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);
}

}

【问题讨论】:

  • 您的 ActionBarDrawerToggle 来自 android.support.v4.app.ActionBarDrawerToggle 还是 android.support.v7.app.ActionBarDrawerToggle ?应该是 android.support.v7.app.ActionBarDrawerToggle
  • 它不会自动工作。按照此处的说明进行操作 - stackoverflow.com/questions/26434504/…
  • 我正在使用 v7:导入 android.support.v7.app.ActionBarDrawerToggle;

标签: android android-fragments navigation-drawer drawertoggle


【解决方案1】:

在你初始化你的抽屉切换之后,设置一个抽屉监听器,所以:

drawerLayout.setDrawerListener(drawerToggle);

【讨论】:

    猜你喜欢
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    相关资源
    最近更新 更多