【问题标题】:Context Menu that invokes other menus调用其他菜单的上下文菜单
【发布时间】:2012-01-07 16:25:41
【问题描述】:

我有一个空白按钮,我想在其上指定名称、颜色和存储日期——所有这些都在用户长按该按钮时完成。请给我一些指导。

  1. 从 ContextMenu 开始是否正确?
  2. 能否从 ContextMenu 调用其他弹出菜单 像名称的 EditText 视图、日期的日期选择器和 颜色的颜色选择器?

感谢任何有关从上下文菜单调用此类子菜单的指导。或者,如果我为按钮分配名称、颜色和日期的理念有误,请提出另一种技术。

谢谢。

【问题讨论】:

    标签: android contextmenu


    【解决方案1】:

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

    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
    

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

     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;
    

    }

    【讨论】:

    • 感谢@coder_For_Life22。您能否向其中一个上下文项选择一个数据选择器来显示某些骨架代码,例如,在选择其中一个上下文项时? span>
    • 太好了,谢谢。我不确定这是如何工作的,但如果您认为我的问题很好,请投赞成票。
    猜你喜欢
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多