#android
#Android
Вопрос:
Я хочу зафиксировать координаты события касания пользователя (для этого я реализовал onTouch
метод), но я также хочу отображать контекстное меню, когда пользователь прикасается к экрану.
При использовании обоих методов onTouch
и onCreateContextMenu
каждое событие касания отправляется 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
Ответ №1:
вы должны возвращать false в onTouch:
True, если прослушиватель использовал событие, false в противном случае.
Ответ №2:
Для меня это решение работает:
myCourtView.setOnTouchListener(new OnTouchListener()
{public boolean onTouch(View v, MotionEvent ev)
{});
Остальное то же самое
Ответ №3:
попробуйте поместить это в общедоступное логическое onTouch после возврата true; registerForContextMenu(this.getListView());