【问题标题】:onCreate is called twiceonCreate 被调用两次
【发布时间】:2015-06-06 11:23:31
【问题描述】:

我有 2 个活动 - MainActivity 和 page1。我从一开始就有这样的意图:

 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 ;
            }

但是,我的 Page1 类的 onCreate 被调用了两次!我可以用 toast 消息检测到它:它在屏幕上出现两次:

@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...
}
        });`

我确实有一些方法在我的 Page1 活动中使用倒计时计时器,等待 2 秒的计时器,我将它们注释掉,但 onCreate() 仍然被调用两次。

我添加了防止屏幕旋转的代码,但错误仍然存​​在

【问题讨论】:

  • 我认为问题是 Toasting a message berore onCreate ... 所以当第二个活动开始执行时,它会 Toast 消息.. 但之后你调用 super.onCreate() .. 所以可能是 onCreate 会调用两次的可能原因..\
  • @Moinkhan,但是 super.onCreate 必须在每个方法中调用,对吧?这是始终调用超类方法的规则 - super.onDestroy() 等
  • 是的,对..但是在第一个语句上写 super() 是个好习惯...使用 super 作为第一个语句允许 onCreate() 执行它的默认行为..然后敬酒..

标签: android countdowntimer oncreate screen-rotation


【解决方案1】:

问题是你的触摸监听器没有检查我们有哪种类型的事件,这意味着你的onTouch 应该每秒被调用 100 次,但实际上它只被调用了两次,因为新的 Activity UI 覆盖按钮。使用此代码检查我们有哪个事件:

@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,则表示用户抬起手指。

【讨论】:

  • 秒我,如果你需要在视图处理之前拦截它会寻找向下动作
  • @Mateiaru,对不起,我不明白:如果操作没有关闭,我们为什么要返回 true?
  • @ERJAN 修复了答案
猜你喜欢
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多