我的活动有些问题。
我有一个主要的活动,在这里我有2个方法被普通班级调用。
public class MainActivity extends Activity {
public void selectUser(String users) {
// Start select user screen
Intent i = new Intent(this, SelectUserActivity.class);
i.putExtra("users", users);
//i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivityForResult(i, SELECT_USER_CODE);
}
public void showPincodeScreen(String userName, String residentName) {
// Start pincode screen
Intent i = new Intent(this, PincodeActivity.class);
i.putExtra("userName", userName);
i.putExtra("residentName", residentName);
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
}
}
在选择用户屏幕中,用户可以从列表中选择用户,并且该用户将返回到主活动的onActivityResult方法。这很有效。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_CANCELED) {
switch (requestCode) {
case SELECT_RESIDENT_CODE:
if (data != null) {
if (data.hasExtra("residentid")) {
loadingScreen("Taken worden opgehaald");
BroadcastSender.sendValue(
data.getStringExtra("residentid"), "1");
}
}
break;
case SELECT_USER_CODE:
if (data != null) {
if (data.hasExtra("userid") && data.hasExtra("username")) {
setTitle(data.getStringExtra("username"));
loadingScreen.hideMessage();
String userid = data.getStringExtra("userid");
BroadcastSender.sendValue(userid, "1");
}
}
break;
选择用户后,将调用showPincodeScreen。 但是当用户按下pincode屏幕上的某个按钮时,再次调用selectUser方法并再次启动selectUserActivity。
但是当我现在选择一个用户时,pincode屏幕跳回到前面,并且不调用mainActivity的onActivityResult方法。
我已经尝试添加
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
选择用户方法,但这不起作用。
可能是什么原因?
编辑:这是selectUser活动的完成方法。但它第一次工作,所以我不认为错误就在这里。
@Override
public void finish() {
// Prepare data intent
Intent data = getIntent();
data.putExtra("userid", selectedItem.getItemID());
data.putExtra("username", selectedItem.getItemName());
// Activity finished ok, return the data
setResult(RESULT_OK, data);
super.finish();
}
答案 0 :(得分:2)
我找到了解决方案,我放了
@Override
protected void onStop() {
finish();
super.onStop();
}
在密码活动中。当用户现在单击该按钮时,pincode活动将转到后台,因此将调用onStop方法并完成活动。
现在调用mainActivity的onActivityResult并正确执行:)
答案 1 :(得分:0)
首先,您应该在SELECT_RESIDENT_CODE
末尾的startActivity
添加showPincodeScreen
,以便onActivityResult
能够抓住它的回复:
startActivity(i,SELECT_RESIDENT_CODE);
当你从pinCode活动中调用selectUser活动时,它将返回到它所调用的活动 - pinCode活动。你应该在那里实现onActivityResult
并在其中调用finish()。