Android: неправильное поведение слушателя? - PullRequest
0 голосов
/ 09 марта 2012

Я начинаю с разработки для Android.Я хотел бы сделать календарь деятельности.У меня активность с этим реализует OnGestureListener, с методами типа onFling(), чтобы detect swipe gestures, и поменять месяц календаря.Это отлично работает.

После этого в моем календаре есть несколько ячеек, по одной в день.Я добавил в каждую ячейку слушателя onclick, чтобы добавить событие на этот день.Когда я это делаю, мой gestureListener перестает работать, и фиксируются только события нажатия на ячейку, но жесты смахивания не работают (метод onFling() никогда не вызывается)Что я могу сделать?

Это мой код:

public class Calendar extends Activity implements OnGestureListener{ ...

//OnFling method that detects the swipe gesture
@Override
   public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
   {
       try {
           if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
               return false;
           // right to left swipe
           if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
               Toast.makeText(getApplicationContext(), "Left Swipe", Toast.LENGTH_SHORT).show();
           }  else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
               Toast.makeText(getApplicationContext(), "Right Swipe", Toast.LENGTH_SHORT).show();
           }
           else if(e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
               Toast.makeText(getApplicationContext(), "Swipe up", Toast.LENGTH_SHORT).show();
           }  else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
               Toast.makeText(getApplicationContext(), "Swipe down", Toast.LENGTH_SHORT).show();
           }
       } catch (Exception e) {
        Toast.makeText(this, "exception", Toast.LENGTH_SHORT).show();
       }

         return true;
   }

//This is the method attached to each cell for onclick event
public void showDialog(View v){
    TextView dia = (TextView)v.findViewWithTag("dia");      
    Intent i = new Intent(this, DialogoCalendario.class);
    i.putExtra("dia",(String) dia.getText() );
    i.putExtra("mes",   ((TextView) findViewById(R.id.tbMes)).getText().toString());
    startActivity(i);
}

1 Ответ

0 голосов
/ 09 марта 2012

Похоже, что Просмотр, где вы используете GestureListener теряет фокус, когда вы работаете с ячейкой.Просто попробуйте с calendarCellView.clearFocus();, когда вы закончите с ячейкой.

...