如何从单一方法操作选项操作

How to manipulate options manipulation from a single method

我创建了一个包含多个活动的应用程序。在所有活动中,我都覆盖了 onOptionsItemSelected 和 onCreateOptionsMenu 方法。由于我的 onOptionsItemSelected 方法很安静,所以我必须在每个 activity 中重复该代码段。我如何创建可应用于所有活动的单一方法。这是我的 onOptionsItemSelected 和 onCreateOptionsMenu 方法。

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_main, menu);
        MenuItem loginItem = menu.findItem(R.id.action_login);
        User u = sharedPreference.getUser(BaseActivity.this);
        if (u.isLogged()) {
            loginItem.setVisible(false);
        }
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_login) {
            if (loggedUser.isLogged())//
            {
                builder = new AlertDialog.Builder(getApplicationContext());
                builder.setMessage(menuDialogMessage)
                        .setTitle(menuDialogTitle)
                        .setCancelable(false);
                builder.setPositiveButton(ok, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        startActivity(new Intent(getApplicationContext(), LoginActivity.class));
                        dialog.dismiss();
                    }
                });
                builder.setNegativeButton(cancel, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
                dialog = builder.create();
                dialog.show();
                return true;
            } else {
                startActivity(new Intent(getApplicationContext(), LoginActivity.class));
                return true;
            }
        } else if (id == R.id.action_settings) {
            builder = new AlertDialog.Builder(getApplicationContext());
            builder.setMessage(menuDialogMessage)
                    .setTitle(menuDialogTitle)
                    .setCancelable(false);
            builder.setPositiveButton(ok, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    startActivity(new Intent(getApplicationContext(), Settings.class));
                    dialog.dismiss();
                }
            });
            builder.setNegativeButton(cancel, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
            dialog = builder.create();
            dialog.show();
            return true;
        } else if (id == R.id.action_change_pw) {
            builder = new AlertDialog.Builder(getApplicationContext());
            builder.setMessage(menuDialogMessage)
                    .setTitle(menuDialogTitle)
                    .setCancelable(false);
            builder.setPositiveButton(ok, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    startActivity(new Intent(getApplicationContext(), ChangePassword.class));
                    dialog.dismiss();
                }
            });
            builder.setNegativeButton(cancel, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
            dialog = builder.create();
            dialog.show();
            return true;
        } else if (id == R.id.action_logout) {
            builder = new AlertDialog.Builder(getApplicationContext());
            builder.setMessage(menuDialogMessage)
                    .setTitle(menuDialogTitle)
                    .setCancelable(false);
            builder.setPositiveButton(ok, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    sharedPreference.removeUser(BaseActivity.this);
                    startActivity(new Intent(getApplicationContext(), LoginActivity.class));
                    dialog.dismiss();
                }
            });
            builder.setNegativeButton(cancel, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
            dialog = builder.create();
            dialog.show();
            return true;
        } else if (id == R.id.action_exit) {
            builder = new AlertDialog.Builder(BaseActivity.this);
            builder.setMessage(exit)
                    .setTitle(menuDialogTitle)
                    .setCancelable(false);
            builder.setPositiveButton(ok, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // User clicked OK button
                    Globals.mContext.finish();
                    System.exit(1);
                    dialog.dismiss();
                }
            });
            builder.setNegativeButton(cancel, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.dismiss();
                }
            });
            dialog = builder.create();
            dialog.show();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

您可以编写一个实现这些方法的基础 activity。您的所有活动都可以扩展此基础 activity 而不是 AppCompatActivity。这样他们都会有这个菜单 'by default'.