0

最初のアクティビティが別のアクティビティを開始するアプリケーションを構築していますstartActivityByResult。設定が完了したら、設定結果を返送する必要があります。

そこで、2 番目のアクティビティのonPause()メソッドをオーバーライドし、インテントを取得して、putExraそれを 経由で送り返しますsetResult()

最初のアクティビティに戻ります。onActivityResult確実に呼ばれました。前に resultCode を設定しましたが、インテント データが null です。何が悪いのかわかりません。

これが私のコードです:

最初のアクティビティ

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.e("page1", requestCode + "_");
    Log.e("page1", resultCode + "_");
    Log.e("page1", (data == null) + "_");
    // if ((requestCode == 1) && (data != null)) {
    if (data != null) {
        String size = data.getStringExtra("size");
        Log.e("switch", size + "_");
        switch (size.charAt(0)) {
        case '1': {
            text.setTextSize(10);
        }
            break;
        case '2': {
            text.setTextSize(20);
        }
            break;
        case '3': {
            text.setTextSize(30);
        }
            break;
        }
    }
}

私の 2 番目のアクティビティ

    @Override
protected void onPause() {

    Intent intent = getIntent();
    Log.e("prefs", (intent == null) + "_");
    intent.putExtra("size", size);
    setResult(3, intent);
    super.onPause();
}

LogCat でテストしました。2 番目のアクティビティで。送信しようとしているインテントは、決して null ではありません。しかし、最初のアクティビティに行くとき。Null が返されました。これは私を本当に夢中にさせています。

4

2 に答える 2

1

コードの問題はString size = data.getStringExtra("size");この行にあります。で変更する必要がありますString size = data.getExtras.getString("size");

最初のアクティビティで:

Intent intent = new Intent(context,SecondActivity.class);
startActivityForResult(intent, REQUEST_CODE);

そして、2 番目のアクティビティSAVEで、そのリスナーで呼び出されるボタンを作成します。

        Intent result = new Intent();
        Bundle bundle = new Bundle();

        bundle.putString("keyName", "KeyValue");

        result.putExtras(bundle);
        setResult(RESULT_OK,result);
        finish();

また、最初のアクティビティのonActivityresultメソッドで:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(resultCode==RESULT_OK){
        if(requestCode == REQUEST_CODE){
            Log.d("Activity Result", data.getExtras.getString("keyName");
        }
    }
}
于 2012-05-08T12:13:29.687 に答える
0

これを試すことができますか。手動で一時停止し、バックプレスで自動的にすべてのケースでアクティビティを終了したいので、意図データを onDestroy に保存することをお勧めします

    @Override
    protected void onPause() {
        super.onPause();
        finish();
    }

    @Override
    public void onDestroy() {
        Intent intent = getIntent();
        intent.putExtra("size", size);
        setResult(3, intent);
        super.onDestroy();
    }
于 2012-05-09T11:08:39.083 に答える