3

私はAndroidアプリに取り組んでいます。デバイスにXMLファイルが存在するかどうかを確認するアクティビティがあります。存在しない場合は、URLからそのファイルをダウンロードするなど、さまざまな処理を実行するルーチンを呼び出します。

存在する場合は、ファイルを再ダウンロードするか、スキップするかをユーザーに確認するように促します(はい/いいえ)。

ダイアログを使用することから始めました。私が見たディスカッションでは、ダイアログは非同期であるとだけ言われていたので、アクティビティを使用してはい/いいえのプロンプトを表示するように切り替えました。

さらに読んだ後、本当の答えは、を使用してアクティビティを開始するとstartActivity()、アクティビティが非同期に開始されますが、を使用startActivityForResult()すると同期的に開始される(ブロッキング)ということだと思います。このステートメントは正しいですか?

OK、上記のステートメントが正しいと仮定して、ユーザーがどのボタン(Yes / No)を選択したかを知って、コードフローの元の開始点に戻る方法を調べています。

すべての例は、これを使用して結果を取得する必要があることを示しています。

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()非同期です。onPause()UI が変更され、呼び出しアクティビティが一時停止される (メソッドが呼び出される)ため、ユーザーと同期しているように感じる可能性があります。

ただし、呼び出しアクティビティは引き続きコードを実行できます。結果のために開始したアクティビティが完了したときに呼び出されるコールバックを実装します (これにより、ダイアログのようになります)。

于 2012-08-28T20:29:56.323 に答える