0

ログイン/パスワード通知としてTheme.Holo.Dialog機能するように、を使用してアクティビティを作成しました。定義したリクエスト コードを使用して、AlertDialogこのアクティビティを開始しました。startActivityForResult(...)問題は、アクティビティを開始するたびにonActivityResult(...)すぐにトリガーされると、ボタンが読み込まれ、すべてが読み込まれますが、ボタンを押すと、ログインが発生したためにアクティビティが機能していることがわかっていても、最初のアクティビティに結果が返されず、私は電話をかけsetResult(...)finish()いて、ボタンが押された後です。初めて startActivityForResult を使用するので、何か不足していると確信しています。

主な活動:

.
.
.
   Intent startDialogIntent = new Intent(this,SetIdDialogAlertActivity.class);
   startDialogIntent.setAction(getString(R.string.ACTION_START_ALERT_DIALOG_ACTIVITY));
   startDialogIntent.putExtra(getString(R.string.parcelable_status));
   IntentParcelable.configurationToParcelable(configuration, getBaseContext()));
   startActivityForResult(startDialogIntent,getResources().getInteger(R.integer.CREATE_USER));

.
.
.

public void onActivityResult(int requestCode, int resultCode,Intent data){
        super.onActivityResult(requestCode, resultCode, data);
        Toast.makeText(getBaseContext(),"returned from activity with request code " + requestCode + " and result code " + resultCode, Toast.LENGTH_SHORT).show();
        if(requestCode == getResources().getInteger(R.integer.CREATE_USER))
            switch (resultCode){
                case RESULT_NEW_USER:
                    Toast.makeText(getBaseContext(),getString(R.string.SU_CorrectPassword_message), Toast.LENGTH_SHORT).show();
                    refreshLabels(data);
                    break;
                case RESULT_WRONG_PASSWORD:
                    Toast.makeText(getBaseContext(),getString(R.string.SU_WrongPassword_message), Toast.LENGTH_SHORT).show();
                    break;
            }
    }

次に、サブアクティビティで:

public void onCreate(Bundle savedInstanceState){
        Logger.d(Messages.tag,System.nanoTime() + "_DIALOG_ALERT:_ON_CREATED");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.user_id_alertdialog);
        Logger.d(Messages.tag,System.nanoTime() + "_DIALOG_ALERT:_VIEW_INFLATED");

        SU_passwordEditText = (EditText)findViewById(R.id.SU_passwordEditText);
        Button okAlarmButton = (Button)findViewById(R.id.okAlarmButton);
        Button cancelAlarmButton = (Button)findViewById(R.id.cancelAlarmButton);

        Logger.d(Messages.tag,System.nanoTime() + "_DIALOG_ALERT:_OK_BUTTON_LOADED");
        okAlarmButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                Logger.d(Messages.tag,System.nanoTime() + "_DIALOG_ALERT:_OK_BUTTON_PRESSED");  
                String password = SU_passwordEditText.getText().toString();
                if(password.equals(getString(R.string.SU_password))){
                    Toast.makeText(getBaseContext(),getString(R.string.SU_CorrectPassword_message), Toast.LENGTH_SHORT).show();
                    userIdEditText = (EditText)findViewById(R.id.userIdEditText);
                    String newUserName = userIdEditText.getText().toString();
                    Logger.d(Messages.tag,System.nanoTime() + "_DIALOG_ALERT:_USERNAME_" + newUserName);                
                    Configuration configuration = IntentParcelable.parcelableToConfiguration((IntentParcelable)getIntent().getParcelableExtra(getString(R.string.parcelable_status))
                            , getBaseContext());
                    configuration.setId(newUserName);
                    Intent setUserIntent = new Intent();
                    setUserIntent.setAction(getString(R.string.ACTION_ACTIVITY_NEW_ID));
                    setUserIntent.putExtra(getString(R.string.INTENT_EXTRA_SENDER_NAME),"DIALOG_ACTIVITY");
                    setUserIntent.putExtra(getString(R.string.INTENT_EXTRA_NEW_CONFIG), IntentParcelable.configurationToParcelable(configuration, getBaseContext()));
                    exitActivity(RESULT_NEW_USER,setUserIntent);
                }else{
                    Toast.makeText(getBaseContext(),getString(R.string.SU_WrongPassword_message), Toast.LENGTH_SHORT).show();
                    exitActivity(RESULT_WRONG_PASSWORD);
                }
            }
        });

private void exitActivity(int exit_code, Intent data) {
    setResult(exit_code,data);
    finish();
}

private void exitActivity(int exit_code) {
    setResult(exit_code);
    finish();
}

コードの投稿が遅くなり申し訳ありません。

[アップデート]

思いつく限りのことをすべて試しましたが、サブ アクティビティはまだ奇妙な動作をしています。onActivityResult(...)親のトリガーであっさり終わったのかと思った。まだスタックの一番上にあるため、終了しません。それを見ることができます。s に実装したものはすべて完了しているため、機能しButtonます。しかし、再びonActivityResult(...)終了すると、前のメソッドはトリガーされません。

[アップデート]

私は何かが欠けているに違いありません。Activityテストのために、まったく新しい を作成しました。それは、それ自体を作成し、結果を 4 に設定して終了するだけです。マニフェストで次のように宣言しました。

        <activity 
            android:name=".ActivityTest"
            android:screenOrientation="portrait"
            android:process=":gui_process"
            android:exported="false">
        </activity>

そして、次のように開始しました:

            Intent startDialogIntent = new Intent(this,ActivityTest.class);
            startActivityForResult(startDialogIntent,getResources().getInteger(R.integer.CREATE_USER));

my で新しい case ステートメントを定義するonActivityResult(...)と、元のアクティビティと同じように動作します。

4

1 に答える 1

0

別のスレッドで問題を見つけました。どうやらsingleInstance起動モードでアクティビティを定義すると、サブアクティビティが開始直後に親アクティビティに結果を報告するようです。親アクティビティの起動モードを標準に戻し、すべてが機能するようになりました。開発者ガイドには王のメモがあるはずです。

于 2012-10-31T08:46:27.083 に答える