Android 不';t调用onMenuItemClick首次-SherlockListActivity

Android 不';t调用onMenuItemClick首次-SherlockListActivity,android,android-actionbar,actionbarsherlock,onclicklistener,optionmenu,Android,Android Actionbar,Actionbarsherlock,Onclicklistener,Optionmenu,我使用Sherlocklist活动, 我用一个项目创建了ActionBar&它的clickListener 当我在创建活动后第一次单击它时,不会调用onMenuItemClick,但在第一次单击后的每次单击中,都会毫无问题地工作 为什么? 原因是您正在调用onoptionItemSelected()方法中的item.setOnMenuItemClickListener(新的OnMenuItemClickListener(){…) 这意味着它将在您第一次单击菜单项时设置(然后在每次单击时重置),其

我使用Sherlocklist活动, 我用一个项目创建了ActionBar&它的clickListener 当我在创建活动后第一次单击它时,不会调用onMenuItemClick,但在第一次单击后的每次单击中,都会毫无问题地工作

为什么?


原因是您正在调用
onoptionItemSelected()
方法中的
item.setOnMenuItemClickListener(新的OnMenuItemClickListener(){…

这意味着它将在您第一次单击
菜单项时设置(然后在每次单击时重置),其中的代码仅在您至少单击一次后才会运行

onCreateOptionsMenu()
中调用此函数,或者只需将代码从
onMenuItemClick()
移动到开关/案例中即可

private void BuildTopActionBar() {
        BitmapDrawable bg = (BitmapDrawable) getResources().getDrawable(
                R.drawable.ic_action_bg);
        bg.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT);
        getSupportActionBar().setBackgroundDrawable(bg);

        this.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        this.getSupportActionBar().setHomeButtonEnabled(true);
        this.getSupportActionBar().setTitle("bookmarks");
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            // This is called when the Home (Up) button is pressed in the Action Bar.
            finish();
            return true;
        case add_bookmark_item:
            // add
            item.setOnMenuItemClickListener(new OnMenuItemClickListener() {

                public boolean onMenuItemClick(MenuItem item) {
                    customAmbilWarnaDialog dialog = new customAmbilWarnaDialog(
                            BookMarksActivity.this, 0xffffffff,
                            new OnAmbilWarnaListener() {

                                public void onCancel(
                                        customAmbilWarnaDialog dialog) {
                                }

                                public void onOk(customAmbilWarnaDialog dialog,
                                        int color, String name, int hasName) {
                                    myDbHelper.AddNewBookmark(name,
                                            currentPageNum, color, hasName);
                                    // code
                                    lv.smoothScrollToPosition((lv.getCount() - 1));
                                }
                            });
                    dialog.show();                  
                    return true;
                }
            });

        }

        return super.onOptionsItemSelected(item);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        menu.add(0, add_bookmark_item, 0, "add bookmark")
                .setIcon(R.drawable.bookmark_add)
                .setShowAsAction(
                        MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
                                | MenuItem.SHOW_AS_ACTION_ALWAYS);

        return true;
    }