2011-12-28 2 views
6

:차이 registerForContextMenu 및 setOnCreateContextMenuListener? registerForContextMenu 차이 무엇

컨텍스트 메뉴를 레지스터 (멀티 뷰 컨텍스트 메뉴를 표시 할 수) 지정된 뷰에 대해 도시한다. 이 메서드는 뷰의 View.OnCreateContextMenuListener를이 액티비티로 설정합니다.

registerForContextMenu()를 호출하고 컨텍스트 메뉴에 표시 할보기를 전달합니다. 그러면이보기가 길게 누르기을 받으면 컨텍스트 메뉴가 표시됩니다.

및 setOnCreateContextMenuListener :이 뷰의 컨텍스트 메뉴가 구축 될 때

콜백 등록이 호출합니다. 이보기를 클릭 할 수없는 경우을 클릭하면 길게 누르십시오.

어느 것을 사용합니까? 그리고 긴 클릭 할 수있는 것들에 대해 : 모두가 같은 일을하고 있습니다 ...

감사

+0

그들은 똑같은 것처럼 보입니다. –

답변

17

의심 ... 안드로이드 소스 코드를 봐! 그것은 결국 오픈 소스입니다. :)

자식 : //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

답을 구할 수는 없다 .. 완벽한, @ 트레버 존스. 또한, 비슷한 유형의 질문/의심을 해결하는 방법을 보여줍니다. – Srichakradhar