3

私は Android 用の Transfuse フレームワークで遊んでとても楽しんでいますが、Activity が Intent を介して値を返す方法がわかりません。

通常、Android アプリでは、 を呼び出しstartActivityForResultて開始し、開始されたアクティビティが終了して返されたデータを含む が与えられるとコールバックさActivityれます。Transfuse がフレームワークから完全に抜け出し、完全にレガシーに移行することなく、これをどのように処理するかはわかりません。のイベント注釈がなく、開始できないようですこれまでのところ、これは私にとって大きな問題です。onActivityResultIntentonActivityResultIntentFactoryActivitystartActivityForResult

この件に関して、私が提起したい別の関連する質問は、Android では、次のコードを使用して、アクティビティ スタックを目的のアクティビティに巻き戻すことができるということです。

Intent i = new Intent(this, DestActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
i.putExtra("key", "val");
startActivity(i);

次に、宛先アクティビティがonNewIntent呼び出され、それがIntent渡されます。Javadoc Transfuse でこれを行う方法がわかりません。フラグをに設定できず、 のイベント注釈がIntentFactoryないことを除いて、ほぼこれを取得しました。また、次のものがあるとしましょう。IntentonNewIntent

@Inject @Extra("key") String key;

onNewIntentが呼び出されたときに更新されますか?

前もって感謝します。johncarl のすばらしい仕事に特に感謝したいと思います。楽しかった。

4

2 に答える 2

3

Transfuse の称賛と親切な言葉に感謝します。

イベント マッピングが Transfuse から欠落しているように見えますが、@OnActivityResult簡単に追加できました ( https://github.com/johncarl81/transfuse/issues/47 )。この機能を使用するには、現在の 0.2.3 スナップショットを使用する必要があります。これは、非スナップショットがリリースされるまで、maven central で使用できるはずです。

Transfuse は、注入されたエクストラを介してアクティビティの結果を処理しません。当面は、これを通常の Android の方法で処理する必要があるようです。良いニュースは、Transfuse がボタン クリックとインテント構築のマッピングに役立つことです。次に例を示します。

最初のアクティビティでインテントをトリガーするボタン リスナー:

@RegisterListener(R.id.resultonebutton)
public android.view.View.OnClickListener listener = new android.view.View.OnClickListener() {

    @Override
    public void onClick(android.view.View view) {
        android.content.Intent intent = intentFactory.buildIntent(new ResultTwoActivityStrategy());
        context.startActivityForResult(intent, REQUEST);
    }
};

2 番目のアクティビティから結果を返すボタン リスナー:

@RegisterListener(R.id.resulttwobutton)
public android.view.View.OnClickListener listener = new android.view.View.OnClickListener() {

    @Override
    public void onClick(android.view.View view) {
        Intent returnIntent = new Intent();
        returnIntent.putExtra(ResultOne.RESULT_KEY, inputText.getText().toString());
        activity.setResult(android.app.Activity.RESULT_OK, returnIntent);
        activity.finish();
    }
};

次に、元のアクティビティの OnActivityResult メソッド:

@OnActivityResult
public void result(int requestCode, int resultCode, android.content.Intent data) {
    if (requestCode == REQUEST) {

        if(resultCode == android.app.Activity.RESULT_OK){
            String result=data.getStringExtra(RESULT_KEY);
            Toast.makeText(context, result, SharedVariables.ONE_SECOND).show();
        }
    }
}

現在のアクティビティ、IntentFactory、およびすべてのウィジェットを注入できることを忘れないでください。

インテントにフラグを追加するには、インテントを構築して .addFlags() メソッドを呼び出すだけです。IntentFactory を使用している場合は、次のようになります。

Intent intent = intentFactory.buildIntent(new ResultTwoActivityStrategy());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(intent, REQUEST);

onNewIntent イベントも欠落しているようです。最近追加された他のイベントと一緒に、すぐに追加することを検討します。

于 2013-07-20T22:21:33.197 に答える
0

結果を処理するには、次のこともできます。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == YOUR_REQUEST_CODE_TO_CHECK) {
        if (resultCode == RESULT_OK) {
            // Do something.
        }
    }
}

楽しんで

于 2014-07-10T13:55:41.030 に答える