2015-06-06 2 views
0

У меня есть 2 мероприятия - MainActivity и page1. У меня есть намерение от первого, как это:onCreate называется дважды

button_forward.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       Intent intent = new Intent(MainActivity.this, Page1.class); 
       startActivity(intent); 
       return true ; 
      } 

Однако OnCreate моего стр.1 класса вызывается дважды! я могу обнаружить его с тостами сообщением: он дважды появляется на экране:

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    Toast.makeText(Page1.this, "onCreate 1", Toast.LENGTH_SHORT).show(); 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.page1); 
    //some code here like findview by id... 
} 
     });` 

У меня есть некоторые методы, которые используют countdowntimer в моей деятельности Page1, таймеры, которые ждут в течение 2 секунд, я заметил их, но OnCreate () все еще вызывается дважды.

Я добавил код, чтобы предотвратить экран вращающуюся, но ошибка сохраняется

+0

Я думаю, что проблема заключается в тостах сообщения berore onCreate ... поэтому, когда запуск второго действия начнется, он подтолкнет сообщение .. но после этого вы вызываете super.onCreate() .. Так что это может быть возможная причина что onCreate будет вызывать дважды .. \ – Moinkhan

+0

@Moinkhan, но super.onCreate нужно вызывать в каждом методе правильно? это правило всегда вызывать метод суперкласса - super.onDestroy() и т. д. – ERJAN

+0

Да, право .. но это хорошая практика, чтобы написать super() в первом заявлении ... Использование супер в качестве первого оператора allow onCreate(), чтобы сделать это поведение по умолчанию .. затем тост сообщения .. – Moinkhan

ответ

3

Проблема заключается в том, что ваш сенсорный слушатель не проверяет, какой тип события у нас есть, это означает, что ваш onTouch должен называться как 100 раз в во-вторых, но на самом деле он называется только дважды, потому что новый интерфейс активности охватывает кнопку. Используйте этот код, чтобы проверить, какое событие мы имеем:

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    if (event.getAction() != MotionEvent.ACTION_DOWN) return false; 
    Intent intent = new Intent(MainActivity.this, Page1.class); 
    startActivity(intent); 
    return true; 
} 

Если действие ACTION_DOWN это означает, что пользователь только прикоснулся к кнопке. Если это ACTION_UP, это означает, что пользователь поднял свой палец.

+0

избили меня за секунды, если вам нужно перехватить перед процессами просмотра, он ищет действие вниз – Burrito

+0

@Mateiaru, извините, я не его понимаю: зачем нам возвращать true, если действие не вниз? – ERJAN

+0

@ERJAN Исправлен ответ – Chaoz

 Смежные вопросы

  • Нет связанных вопросов^_^