如何启用的ContextMenu
/禁用的项目,我可以在此通过ContextMenu禁用的项目:在onCreateContextMenu,如果我有什么如何启用的ContextMenu
menu.getItem(1).setEnabled(false);
,但后来想用同样的活动中设置为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!!!!
}
}
}
}
回答:
你应该写代码来启用/禁用选项菜单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 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;
}
回答:
使用onPrepareOptionsMenu
@Override public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
menu.getItem(1).setEnabled(true);
return true;
}
同样适用于Android 3.0及更高版本,您必须调用invalidateOptionsMenu()当您要更新的菜单,因为该菜单始终打开。系统然后会调用onPrepareOptionsMenu(),以便更新菜单项。
回答:
与选项菜单相反,您需要使用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;
}
}
}
回答:
,你可以在这里看到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);
}
}
使得图标点点时尚。
享受您的代码:)
以上是 如何启用的ContextMenu 的全部内容, 来源链接: utcz.com/qa/260657.html