如何从单一方法操作选项操作
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'.
我创建了一个包含多个活动的应用程序。在所有活动中,我都覆盖了 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'.