ANDROID: контекстное меню не отображается - PullRequest
1 голос
/ 26 мая 2011

У меня есть активность. В деятельности у меня есть это в onCreate:

@Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

      settings = (GlobalSettings) getApplication();
      mappingServiceContent = settings.getMappingServiceContent();
      mapView = settings.getMapView();
      if (mapView == null)
      {
          mapView = new RMapView(RCoordinateSystemFactory.createFromCrsCode("EPSG:2170"));
          settings.setMapView(mapView);
          settings.isFirstTime = true;
      }
      else
      {
          settings.isFirstTime = false;
      }

      RelativeLayout relativeLayout = new RelativeLayout(this);
      myMapView = new MyMapView(this, this.getWindowManager(), settings);  
      zoomControls = new ZoomControls(this);
      registerForContextMenu(myMapView );

      RelativeLayout.LayoutParams mapViewLayoutParams = new RelativeLayout.LayoutParams
        (RelativeLayout.LayoutParams.FILL_PARENT,RelativeLayout.LayoutParams.FILL_PARENT );
      relativeLayout.addView(myMapView, mapViewLayoutParams);

      RelativeLayout.LayoutParams zoomControlsLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT );
        zoomControlsLayoutParams.addRule (RelativeLayout.ALIGN_PARENT_BOTTOM);
        zoomControlsLayoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
      relativeLayout.addView(zoomControls,zoomControlsLayoutParams);

      zoomControls.setOnZoomInClickListener(new View.OnClickListener() {
          public void onClick(final View v) {
            myMapView.ZoomIn();
          }
        });

        zoomControls.setOnZoomOutClickListener(new View.OnClickListener() {
          public void onClick(final View v) {
            myMapView.ZoomOut();
          }
        });


      myMapView.setClickable(true);
      myMapView.setEnabled(true);

      setContentView(relativeLayout);
   }

MyMapView - это представление, созданное следующим образом:

public class MyMapView extends View

В своей деятельности я добавил:

   @Override  
   public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {  
       super.onCreateContextMenu(menu, v, menuInfo);  
       menu.setHeaderTitle("Context Menu");  
       menu.add(0, v.getId(), 0, "Action 1");  
       menu.add(0, v.getId(), 0, "Action 2");  
   }

Но контекстное меню никогда не срабатывает, если я держу палец на экране. Я, должно быть, что-то упустил ... Может кто-нибудь, пожалуйста, помогите мне?

привет.

Ответы [ 3 ]

1 голос
/ 26 мая 2011

Может быть, вы просто скучаете по sg. AFAIK ваш код должен работать. Если вы не можете найти решение, попробуйте AlertDialog, оно такое же (или выглядит и ведет себя так же, idk).

    final CharSequence[] items = {"Red", "Green", "Blue"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setItems(items, new DialogInterface.OnClickListener() {    
 public void onClick(DialogInterface dialog, int item) {        
    Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();     
    }
 });
AlertDialog alert = builder.create();

Код от здесь

1 голос
/ 26 мая 2011

Исходя из того, что вы используете onTouch в MyMapView, вы можете сделать что-то вроде этого.Просто верните false в событиях, и оно не будет использовано.

public class MyButtonMenuAndTouch extends Button {

    private static final String TAG = MyButtonMenuAndTouch.class.getName();

    private GestureDetector mGestureDetector;

    public MyButtonMenuAndTouch(Context context) {
        super(context);

        this.setText("My button with context menu and touch");

        mGestureDetector = new GestureDetector(new MyGestureDetector());        

        this.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (mGestureDetector.onTouchEvent(event)) {                 
                    Log.d(TAG, "onTouchEvent");
                }
                return false;
            }
        });

        this.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                Log.d(TAG, "onLongClickEvent");
                return false;
            }
        });
    }

    private class MyGestureDetector extends SimpleOnGestureListener {

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
                float velocityY) {          
            Log.d(TAG, "onFling() - MyGestureDetector");
            return true;
        }
        @Override
        public boolean onDown(MotionEvent e) {
            Log.d(TAG, "onDown() - MyGestureDetector");
            return true;
        }

        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            Log.d(TAG, "onSingleTapUp() - MyGestureDetector");
            return true;
        }       
    }
}
0 голосов
/ 26 мая 2011

вам нужно использовать menuInflater для раздувания в заданном меню ресурсов. См. Этот пример будет полезно Меню

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