上下文调用其他菜单的菜单

时间:2012-01-07 16:25:41

标签: android contextmenu

我有一个空白按钮,我想在其上分配名称,颜色和存储日期 - 所有当用户长按该按钮时。我希望得到一些指导。

  1. 开始使用ContextMenu做正确的事情吗?
  2. 从ContextMenu,我可以调用其他弹出菜单     比如名称的EditText视图,日期的日期选择器和     颜色的颜色选择器?
  3. 赞赏上下文菜单中关于此类子菜单调用的任何指导。或者如果我有一个错误的理念为按钮指定名称,颜色和日期,请提出另一种技巧。

    谢谢。

1 个答案:

答案 0 :(得分:0)

对于按钮长按,您需要做的就是这个

down.setOnLongClickListener(new OnLongClickListener() { 
    @Override
    public boolean onLongClick(View v) {
        // TODO Auto-generated method stub
        return true;
    }
});

然后,要创建上下文菜单,您需要创建一个菜单资源。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/new_game"
      android:icon="@drawable/ic_new_game"
      android:title="@string/new_game" />
<item android:id="@+id/help"
      android:icon="@drawable/ic_help"
      android:title="@string/help" />
</menu>

然后在您的活动中覆盖此方法并夸大您的上下文菜单

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
                            ContextMenuInfo menuInfo) {
 super.onCreateContextMenu(menu, v, menuInfo);
 MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}

这是捕捉选择哪个项目并相应地采取行动的方法

@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
 switch (item.getItemId()) {
 case R.id.edit:
editNote(info.id);
return true;
case R.id.delete:
deleteNote(info.id);
return true;
default:
return super.onContextItemSelected(item);
}
}

现在你所做的就是长按这样的上下文菜单按钮。

registerForContextMenu(down);  //Your button

编辑:要显示日期选择器,只需创建一个dialogDate选择器并添加

 showDialog(DATE_DIALOG_ID);

在上下文菜单的switch语句中..

以下是创建日期选择器对话框的方法

private TextView mDateDisplay;
private Button mPickDate;
private int mYear;
private int mMonth;
private int mDay;

static final int DATE_DIALOG_ID = 0;
// get the current date
    final Calendar c = Calendar.getInstance();
    mYear = c.get(Calendar.YEAR);
    mMonth = c.get(Calendar.MONTH);
    mDay = c.get(Calendar.DAY_OF_MONTH);

// the callback received when the user "sets" the date in the dialog
private DatePickerDialog.OnDateSetListener mDateSetListener =
        new DatePickerDialog.OnDateSetListener() {

            public void onDateSet(DatePicker view, int year, 
                                  int monthOfYear, int dayOfMonth) {
                mYear = year;
                mMonth = monthOfYear;
                mDay = dayOfMonth;

            }
        };

@Override
 protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_DIALOG_ID:
    return new DatePickerDialog(this,
                mDateSetListener,
                mYear, mMonth, mDay);
}
return null;

}