Question

HomeButton is not Enabled to toggle the menu!

it works in my testing-app, but not in the app I want.

Here the NavigationDrawerActivity:

public class NavigationDrawerActivity extends Activity{

    protected String[] drawerList;
    protected ListView drawerView;
    protected DrawerLayout drawerLayout;
    protected Context context;

    private ActionBarDrawerToggle mDrawerToggle;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context=this;

        drawerView=(ListView) findViewById(R.id.left_drawer);
        drawerLayout=(DrawerLayout) findViewById(R.id.drawer_layout);


        //Android doesn't accept the ListView.setAdapter here..!?
        drawerList = getResources().getStringArray(R.array.nav_drawer_items);

        ((ListView) findViewById(R.id.left_drawer)).setAdapter(new ArrayAdapter<String>(this, R.layout.menu_list_item, drawerList));

        drawerView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent menu;
                switch (position) {
                case 0:
                    drawerLayout.closeDrawer(drawerView);
                    if(context.getClass().equals(ActivityMain.class)) {
                        Log.i("menu", "same Actvity");
                        break;
                    }
                    menu = new Intent(context, ActivityMain.class);
                    menu.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(menu);
                    overridePendingTransition(R.anim.in, R.anim.out);
                    break;
                default:
                    drawerLayout.closeDrawer(drawerView);
                    //new RalaAlertToast(context, "default");
                    break;
                }
            }
        });

        mDrawerToggle = new ActionBarDrawerToggle((Activity) context, drawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {
            /** Called when a drawer has settled in a completely closed state. */
            public void onDrawerClosed(View view) {
                super.onDrawerClosed(view);
                getActionBar().setTitle(R.string.app_name);
            }

            /** Called when a drawer has settled in a completely open state. */
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                getActionBar().setTitle(R.string.app_name);
            }
        };

        drawerLayout.setDrawerListener(mDrawerToggle);

        getActionBar().setDisplayHomeAsUpEnabled(true);
        actionAPI14();
    }

    @TargetApi(14)
    private void actionAPI14() {
        if(Build.VERSION.SDK_INT>=14) {//disabled Target Check
            getActionBar().setHomeButtonEnabled(true);
        }
    }

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

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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Pass the event to ActionBarDrawerToggle, if it returns
        // true, then it has handled the app icon touch event
        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        // Handle your other action bar items...

        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
            if(! drawerLayout.isDrawerOpen(drawerView)) {
                finish();
                System.exit(0);
                return true;
            }else{
                drawerLayout.closeDrawer(drawerView);
            }
        }
        return false;
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
            if(drawerLayout.isDrawerOpen(drawerView)) {
                drawerLayout.closeDrawer(drawerView);
                return true;
            }
        }
        return false;
    }
}

I've read many forums and other sites about target...
but nothing helped.
What could be possible reasons?

I've also posted it for others, they are long searching for a simple way to make their own menu. Just extends this Claes. (I searched long, and in my testing app it works without any problems!)

Was it helpful?

Solution

Make sure, that you call in your activity super.onOpionsItemSelected!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top