Контекстное меню, которое вызывает другие меню - PullRequest
0 голосов
/ 07 января 2012

У меня есть пустая кнопка, на которой я хотел бы назначить имя, цвет и сохранить дату - все, когда пользователь долго нажимает на эту кнопку. Буду признателен за некоторые рекомендации, пожалуйста.

  1. Правильно ли начинать с ContextMenu?
  2. Из ContextMenu я могу вызвать другие всплывающие меню как представление EditText для имени, указатель даты для даты, и палитру цветов?

Любое руководство по вызову такого подменю из контекстного меню приветствуется. Или, если у меня неправильная философия присвоения имени, цвета и даты кнопке, предложите другой метод.

Спасибо.

1 Ответ

0 голосов
/ 07 января 2012

Для длительного нажатия кнопки все, что вам нужно сделать, это

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;

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...