将不同的上下文菜单分配给多个按钮
问题描述:
我有一个带有几个按钮的窗口。我希望点击一个按钮来显示上下文菜单,但是如果按下另一个按钮,则会在上下文菜单中显示其他内容。 这里是我的代码将不同的上下文菜单分配给多个按钮
package com.a.c;
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.Button;
import android.widget.Toast;
public class test extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button) findViewById(R.id.button_example);
registerForContextMenu(btn);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Context Menu");
menu.add(0, v.getId(), 0, "Action 1");
menu.add(0, v.getId(), 0, "Action 2");
}
@Override
public boolean onContextItemSelected(MenuItem item) {
if(item.getTitle()=="Action 1"){function1(item.getItemId());}
else if(item.getTitle()=="Action 2"){function2(item.getItemId());}
else {return false;}
return true;
}
public void function1(int id){
Toast.makeText(this, "function 1 called", Toast.LENGTH_SHORT).show();
}
public void function2(int id){
Toast.makeText(this, "function 2 called", Toast.LENGTH_SHORT).show();
}
}
我已经看到了这Question这是有益的,因此我修改了代码,但它不工作。我不知道发生了什么问题。 这是修改过的。
package com.a.c;
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.Button;
import android.widget.Toast;
public class DemoActivity extends Activity{
Button Buildings = (Button) findViewById(R.id.button1);
Button foodcourt = (Button) findViewById(R.id.button2);
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
registerForContextMenu(Buildings);
registerForContextMenu(foodcourt);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
if (v == Buildings) {
menu.setHeaderTitle("Context Menu");
menu.add(0, v.getId(), 0, "Action 1");
menu.add(0, v.getId(), 0, "Action 2"); }
else if (v == foodcourt) {
menu.setHeaderTitle("Context Menu");
menu.add(0, v.getId(), 0, "Action 1");
menu.add(0, v.getId(), 0, "Action 2");
menu.add(0, v.getId(), 0, "Action 5");
}
}
@Override
public boolean onContextItemSelected(MenuItem item) {
if(item.getTitle()=="Action 1"){function1(item.getItemId());}
else if(item.getTitle()=="Action 2"){function2(item.getItemId());}
else if(item.getTitle()=="Action 3"){function3(item.getItemId());}
else if(item.getTitle()=="Action 4"){function4(item.getItemId());}
else if(item.getTitle()=="Action 5"){function5(item.getItemId());}
else {return false;}
return true;
}
public void function1(int id){
Toast.makeText(this, "function 1 called", Toast.LENGTH_SHORT).show();
}
public void function2(int id){
Toast.makeText(this, "function 2 called", Toast.LENGTH_SHORT).show();
}
public void function3(int id){
Toast.makeText(this, "function 1 called", Toast.LENGTH_SHORT).show();
}
public void function4(int id){
Toast.makeText(this, "function 2 called", Toast.LENGTH_SHORT).show();
}
public void function5(int id){
Toast.makeText(this, "function 1 called", Toast.LENGTH_SHORT).show();
}
}
答
把你的按钮初始化内部onCreate()
这样的:
public class DemoActivity extends Activity{
Button buildings;
Button foodcourt;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
buildings = (Button) findViewById(R.id.button1);
foodcourt = (Button) findViewById(R.id.button2);
registerForContextMenu(Buildings);
registerForContextMenu(foodcourt);
}
//rest of your code...
它的工作很多感谢✿ – user1009889 2011-12-31 10:07:36