我可以使用以下方法禁用上下文菜单中的项目:
menu.getItem(1).setEnabled(false);
在onCreateContextMenu中,但如果我以后想在同一个活动中将其设置为true怎么办?我怎么能在运行时这样做?
编辑:
// Create context menu
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Options for this image"); // Title for the menu
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_1_menu, menu);
menu.getItem(1).setEnabled(false);
}
这是我想要更改要启用的项目的地方:
// Handle return values from different activities
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
if (requestCode == 1) {
// Get value from intent
String imageId = data.getExtras().getString("imageId");
// Show full screen image
Bitmap bitmap = BitmapFactory.decodeFile(imageId);
imageView.setImageBitmap(bitmap);
}
else if(requestCode == 2) {
String contact1 = data.getExtras().getString("contactName");
String contact2 = data.getExtras().getString("test");
Toast.makeText(Activity_1.this, "" + "Value from activity 3: " + contact1 + " " + contact2, Toast.LENGTH_SHORT).show();
CHANGE MENU ITEM 1 TO ENABLE HERE!!!!
}
}
}
}
答案 0 :(得分:0)
您应该编写代码以启用/禁用onPrepareOptionsMenu中的选项菜单,如明确提到的here。
@Override
public boolean onPrepareOptionsMenu(Menu menu)
{
super.onPrepareOptionsMenu(menu);
if (yourConditionIsSatisfied)
{
menu.getItem(1).setEnabled(true);
} else
{
menu.getItem(1).setEnabled(false);
}
return true;
}
在预蜂窝中,您只需要将yourConditionIsSatisfied
的值更改为true/false
,而不是其他任何内容。您无需担心是否会被触发,因为单击选项按钮时onPrepareOptionsMenu()
始终会被触发。但是如果OS的更高版本需要调用invalidateOptionsMenu()。 invalidateOptionsMenu()
将依次触发onPrepareOptionsMenu()
。根据您给出的代码,您应该编写以下代码
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode == Activity.RESULT_OK)
{
if (requestCode == 1)
{
// Get value from intent
String imageId = data.getExtras().getString("imageId");
// Show full screen image
Bitmap bitmap = BitmapFactory.decodeFile(imageId);
imageView.setImageBitmap(bitmap);
// Add new menu item for context menu of the imageview
// Write
} else if (requestCode == 2)
{
String contact1 = data.getExtras().getString("contactName");
String contact2 = data.getExtras().getString("test");
Toast.makeText(Activity_1.this, "" + "Value from activity 3: " + contact1 + " " + contact2, Toast.LENGTH_SHORT).show();
conditionSatisfied = true;
invalidateOptionsMenu();
}
}
}
@Override
public boolean onPrepareOptionsMenu(Menu menu)
{
super.onPrepareOptionsMenu(menu);
if (conditionSatisfied)
{
menu.getItem(1).setEnabled(true);
} else
{
menu.getItem(1).setEnabled(false);
}
return true;
}
答案 1 :(得分:0)
使用onPrepareOptionsMenu
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
menu.getItem(1).setEnabled(true);
return true;
}
此外,在Android 3.0及更高版本中,如果要更新菜单,则必须调用invalidateOptionsMenu(),因为菜单始终处于打开状态。然后系统将调用onPrepareOptionsMenu(),以便您可以更新菜单项。
答案 2 :(得分:0)
与需要onPrepareOptionsMenu
方法添加每次显示菜单时应执行的菜单特定代码的选项菜单相反,您可以在onCreateContextMenu
中执行此操作以获取上下文菜单。每次菜单显示在屏幕上时都会调用onCreateContextMenu
。
因此,只需在某处存储菜单的启用状态,并使用此变量在onCreateContextMenu
方法中相应地设置启用状态。对于您的示例,这看起来像
boolean menuItem1EnabledState = false;
// Create context menu
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Options for this image"); // Title for the menu
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_1_menu, menu);
menu.getItem(1).setEnabled(menuItem1EnabledState);
}
// Handle return values from different activities
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
if (requestCode == 1) {
// Get value from intent
String imageId = data.getExtras().getString("imageId");
// Show full screen image
Bitmap bitmap = BitmapFactory.decodeFile(imageId);
imageView.setImageBitmap(bitmap);
}
else if(requestCode == 2) {
String contact1 = data.getExtras().getString("contactName");
String contact2 = data.getExtras().getString("test");
Toast.makeText(Activity_1.this, "" + "Value from activity 3: " + contact1 + " " + contact2, Toast.LENGTH_SHORT).show();
menuItem1EnabledState = true;
}
}
}
答案 3 :(得分:0)
您可以在此处link查看相关信息。 基本上代码sniipet
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem item = menu.findItem(R.id.menu_my_item);
if (myItemShouldBeEnabled) {
item.setEnabled(true);
item.getIcon().setAlpha(255);
} else {
// disabled
item.setEnabled(false);
item.getIcon().setAlpha(130);
}
}
使图标有点时尚。
享受您的代码:)