3

我正在开发一个 Android 应用程序。我有一个活动来检查我的设备上是否存在 XML 文件。如果它不存在,我会调用一个例程来做很多事情,包括从 URL 下载该文件。

如果确实存在,我想提示(是/否)用户查看他们是否要重新下载文件,或者只是跳过它。

我从使用对话框开始。我看到的讨论说Dialogs只是异步的,所以我切换到使用Activity来提示Yes/No。

进一步阅读后,我相信真正的答案是使用startActivity()异步启动一个活动,但使用startActivityForResult()同步设置它(阻塞)。这个说法正确吗?

好的,假设我上面的陈述是正确的,我一直在研究如何回到我在代码流中的原始起点,知道用户选择了哪个按钮(是/否)。

所有的例子都告诉我,我需要使用它来获得我的结果。

protected void onActivityResult(int requestCode, int resultCode,Intent data) {

}

我正在努力解决如何将其放入我的代码中以使其更容易流动。我看到很多示例显示所需的代码片段,但我不清楚它们是如何组合在一起的。我的代码结构是否最终是这样的:

public class MainScreen extends Activity    {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    protected void onButtonClick(parameters)    {
        /* Do some work to see if the file exists */
        if (!file.exists()) {
            runComplexRoutine(various_parameters);

        } else {
            Intent myIntent = new Intent(getBaseContext(), PromptingActivity.class);
            myIntent.putExtra("filename", variable_holding_filename);   // Just passing a parameter to use in the title of the caled Activity
            startActivityForResult(myIntent, 1);
                        // Point A
        }
    }


    protected void onActivityResult(int requestCode, int resultCode,Intent data) {
        if (resultsCode == Activity.RESULT_OK)  {
            runComplexRoutine(various_parameters);
        }
        // else, do nothing...
    }

}

我的问题是我必须通过很多various_parameters地方。如果我能在 处恢复流量就好了Point A,但这似乎是不可能的。我在这里正确吗?

4

2 回答 2

1

startActivityForResult()是异步的。由于 UI 会发生变化,并且您的调用活动将被暂停(您的onPause()方法将被调用),因此它对用户来说可能是同步的。

但是,您的调用活动仍然能够运行代码;您将实现一个回调,以便在您为结果启动的活动完成时调用(这使它非常像一个对话框)。

于 2012-08-28T20:29:56.323 回答
0

我发现使用startActivityForResultandonActivityResult将在startActivityForResulttoonActivityResult和 break flow之后移动流startActivityForResult。我想着如何在startActivityForResult不破坏它的情况下继续流动。在思索着合适的方法时,我终于找到了“Getting a result from an activity”的内容。希望这可以帮助。

这是一个链接

于 2021-02-26T02:18:13.967 回答