2011-12-28 2 views
6

какая разница между registerForContextMenu:разность регистровForContextMenu и setOnCreateContextMenuListener?

Регистры контекстное меню, которое будет показано для данного представления (несколько представлений может показать контекстное меню). Этот метод будет устанавливать View.OnCreateContextMenuListener на вид этого вида деятельности.

Вызовите регистрForContextMenu() и передайте ему представление, которое вы хотите предоставить контекстному меню. Когда этот вид затем получает длинное нажатие, он отображает контекстное меню.

и setOnCreateContextMenuListener:

Регистрация обратного вызова, которая будет вызвана, когда контекстное меню для этого вида строится. Если этот вид не длинный, можно щелкнуть мышью, он станет длинным кликабельным.

какой использовать? и о длинных интерактивных вещах: оба делают то же самое ...

Благодаря

+0

Похоже, что это то же самое. –

ответ

17

Если вы сомневаетесь ... посмотрите на исходный коде Android! В конце концов, это с открытым исходным кодом. :)

мерзавец: //android.git.kernel.org/platform/frameworks/base.git/core/java/android/view/View.java:

/** 
* Register a callback to be invoked when the context menu for this view is 
* being built. If this view is not long clickable, it becomes long clickable. 
* 
* @param l The callback that will run 
* 
*/ 
public void setOnCreateContextMenuListener(OnCreateContextMenuListener l) { 
    if (!isLongClickable()) { 
     setLongClickable(true); 
    } 
    mOnCreateContextMenuListener = l; 
} 

мерзавец: //android.git.kernel.org/platform/frameworks/base.git/core/java/android/app/Activity.java:

/** 
* Registers a context menu to be shown for the given view (multiple views 
* can show the context menu). This method will set the 
* {@link OnCreateContextMenuListener} on the view to this activity, so 
* {@link #onCreateContextMenu(ContextMenu, View, ContextMenuInfo)} will be 
* called when it is time to show the context menu. 
* 
* @see #unregisterForContextMenu(View) 
* @param view The view that should show a context menu. 
*/ 
public void registerForContextMenu(View view) { 
    view.setOnCreateContextMenuListener(this); 
} 

Итак, ответ в том, что они одинаковы. registerForContextMenu() ничего не делает, кроме вызова setOnCreateContextMenuListener().

+0

mmh спасибо, я никогда не пытался смотреть на исходный код, на любых языках, я боюсь потеряться всего через несколько секунд, но хорошо, я посмотрю в следующий раз! спасибо за Ваш ответ! Ура! – Paul

+0

ответ на который не может быть прошу ... идеальный, @Trevor Johns. Кроме того, он показывает способ решения других подобных вопросов/сомнений. – Srichakradhar