0

私は、Head First: Android book に従って Android を学習しています。第 10 章: Drawers では、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);
}

}

4

1 に答える 1

2

ドロワー トグルを初期化したら、ドロワー リスナーを設定します。

drawerLayout.setDrawerListener(drawerToggle);
于 2015-09-14T19:19:44.890 に答える