方法调用 - onActivityResult vs DialogInterface.OnClickListener()

时间:2012-07-21 13:08:49

标签: android android-intent android-activity dialog chronometer

我刚刚在Play商店发布了一款游戏,并计划让它看起来更好,更直观,我正试图用地雷取代Android对话框。

当用户完成一个级别时,我需要显示自定义对话框,如果用户单击某些按钮,则对话框(具有使其看起来像对话框的自定义主题的活动)必须返回一个整数, setResult(customResult, intent)然后完成。

问题是,当我在onActivityResult()活动的startActivityForResult(intentCustomDialog, 0)中收到resultCode时,我会调用一个自定义方法重启该级别,或根据结果启动下一个级别(使用知道用户点击了什么按钮。这种方法也应该重新启动Chronometer,但它什么都不做!!!!!!!
另一方面,当我使用android对话框并将restart()调用放入onClickListener时,计时器成功重启!?

那我错过了什么?为什么restart()调用使用onClickListener安卓对话框成功重启计时器,但是当我从onActivityResult()方法调用时却没有?

非常有帮助,因此我可以创建自己的对话框并使用onActivityResult()甚至调用自定义onDialogResult()方法来分隔startActivityForResult()个自定义对话框活动和正常活动的启动。

提前致谢。

修改

在我的游戏课程中:

...
public static final int RESULT_RESTART = 8;
public static final int RESULT_NEXT = 9;
public static final int RESULT_MENU = 10;
...

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (resultCode) {
        case RESULT_MENU:
            back(null);
            break;
        case RESULT_NEXT:
            nextGrid();
            break;
        case RESULT_RESTART:
            restartGrid();
            break;
    }
}

restartGrid()方法:

public void restartGrid() {
    ...
    startChrono();
    ...
}

public void startChrono() {
    chrono.setBase(SystemClock.elapsedRealtime());
    chrono.start();
}

完美地从DialogInterface.OnClickListener()开始。

1 个答案:

答案 0 :(得分:0)

可以让它发挥作用:

public void startChrono() {
    chrono.post(new Runnable() {
        @Override
        public void run() {
            chrono.setBase(SystemClock.elapsedRealtime());
            chrono.start();
        }
    });
}

但是我仍然不明白为什么我必须为计时器这样做,因为已经着色的视图在没有使用post方法的情况下被正确重置... 无论如何它有效:)