2011-05-03 4 views
10

사용자 터치 이벤트의 좌표를 캡처하려고합니다 (이 경우 onTouch 메서드를 구현했습니다)하지만 사용자가 화면을 터치 할 때 컨텍스트 메뉴를 표시하려고합니다.onTouch와 onCreateContextMenu를 동시에 사용하여

onTouchonCreateContextMenu 방법을 모두 사용하는 경우 모든 터치 이벤트는 onTouch 방법으로 전송됩니다. onCreateContextMenu 메서드는 호출되지 않습니다. 나는 이것이 예상된다고 생각한다. 그런 다음 openContextMenu(v)onTouch 메서드에서 호출하여 상황에 맞는 메뉴를 수동으로 시도했지만이 작동하지만 onContextItemSelected(MenuItem item) 호출 후에 메뉴가 화면에서 사라지지 않습니다. 그러면 어떻게이 일을 할 수 있을까요?

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.record_match); 
    myCourtView = new MyImageView(getApplicationContext()); 
    ll = (LinearLayout)findViewById(R.id.linearLayout); 
    ll.addView(myCourtView, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
    registerForContextMenu(myCourtView); 
    myCourtView.requestFocus(); 
    myCourtView.setOnTouchListener(this); 

}// End OnCreate 


    // Implement the OnClickListener callback 
    public boolean onTouch(View v, MotionEvent event) { 
     //do something when user interacts with the court view 
     myCourtView.processEvent(event); 
     openContextMenu(v); 
     myCourtView.invalidate(); 
     return true; 
    }//End OnClickListener 

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

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    switch (item.getItemId()) { 
    case R.id.player_1: 
    //do something 
    return true; 
    case R.id.player_2: 
    //do something else 
    return true; 
    } 
    return true; 
}//End onContextItemSelected 

답변

0

당신은 onTouch에서 false를 반환한다 : 리스너가 그렇지 않은 경우는 false 이벤트를 소비하고있다

진정한합니다. 나를 위해

0

이 솔루션 작업 :

myCourtView.setOnTouchListener(new OnTouchListener() 
    {public boolean onTouch(View v, MotionEvent ev) 
     {}); 

나머지는 같은

0

사실 반환 후 공공 부울 onTouch이 퍼팅 시도이다; registerForContextMenu (this.getListView());

관련 문제