如何启用的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

回到顶部