我已經使用Theme.Holo.Dialog
編寫了一個活動,以便它可以作爲登錄名/密碼通知的AlertDialog
。我已使用我定義的請求代碼,使用startActivityForResult(...)
開始了此活動。事情是,每當我開始活動onActivityResult(...)
立即觸發,按鈕被加載和一切,但一旦我按下他們,即使我知道活動工作,因爲登錄確實發生,沒有結果發回到第一個活動按下按鈕後,我打電話setResult(...)
和finish()
。 在此先感謝,第一次使用startActivityForResult,所以我相信我一定會錯過一些東西。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(...)
觸發後突然完成。它沒有完成,因爲它仍然在堆棧頂上,我可以看到它,並且它確實工作,因爲我實施到Button
的任何事情都完成了。但是當它再次結束時它不會觸發前一個的onActivityResult(...)
方法。
[更新]
我MUST失去了一些東西。爲了測試的緣故,我只是創建了一個全新的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));
定義在我onActivityResult(...)
一個新的case語句,它的行爲就像原來的活動。
一些代碼會很棒! –
你可以顯示你的代碼.. – mainu
明天我會發布它,因爲我不得不寫這個匆忙。沒有代碼的 –