简体   繁体   English

如何从后台堆栈中删除活动? 开始活动结果

[英]How to remove an activity from a backstack? startActivityForResult

I have a problem with my simple login app using SharingPreferences.我的简单登录应用程序使用共享首选项时遇到问题。 Imagine,that user logs in to application.想象一下,该用户登录到应用程序。 He has "Log out" button inside his personal account.他的个人帐户中有“注销”按钮。 When user already logged in then he shouldn't return to login activity when he clicks "Back" button on his smartphone, he should return only then he clicks log out button and then he may fill fields with other data(other login,other password).当用户已经登录时,当他点击智能手机上的“返回”按钮时,他不应该返回登录活动,他应该只在点击注销按钮后返回,然后他可以用其他数据(其他登录名,其他密码)填写字段)。

So, I can't finish() my first activity,because it is possible to return back.所以,我无法完成()我的第一个活动,因为有可能返回。

Doesn't work ( it is impossible to return back to login (MainActivity) when I click LOG OUT button.不起作用(当我单击 LOG OUT 按钮时,无法返回登录(MainActivity)。

        signInButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            sharedPreferencesEditor.putString("user_login",login.getText().toString());
            sharedPreferencesEditor.putString("user_password",password.getText().toString());
            sharedPreferencesEditor.apply();
            Log.d("MyLog_name",sharedPreferences.getString("user_login",""));
            Log.d("MyLog_pw",sharedPreferences.getString("user_password",""));


            Log.d("MyTag",login.getText().toString());
            Log.d("MyTag",password.getText().toString());


            if(login.getText().toString().equals(getString(R.string.user_name)) && password.getText().toString().equals(getString(R.string.user_pw))){
                Intent intent = new Intent(MainActivity.this, SuccessActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivityForResult(intent,1);
                finish();
            } else {
                Toast.makeText(getApplicationContext(),"Wrong data(очищаю пароль)",Toast.LENGTH_SHORT).show();
                password.setText("");
            }

        }
    });



@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == 1 && resultCode == RESULT_OK && data!=null){
        String savedUser = data.getStringExtra("username");
        Toast.makeText(getApplicationContext(),"Farewell, " + savedUser,Toast.LENGTH_SHORT).show();
    }else{
        Toast.makeText(getApplicationContext(),"Error(Back button was pressed, no prohibition of back stack)",Toast.LENGTH_SHORT).show();
    }
}

SuccessActivity.java成功活动.java

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_success);

    welcome = (TextView)findViewById(R.id.welcome);
    logOut = (Button) findViewById(R.id.logOut);
    sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

    savedUserName = sharedPreferences.getString("user_login","");

    welcome.setText("Welcome, " + savedUserName);
    logOut.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
            intent.putExtra("username",savedUserName);
            setResult(RESULT_OK, intent);
            finish();
        }
    });
}

Don't finish activity when you are using startActivityForResult() method just put your code ->使用 startActivityForResult() 方法时不要完成活动,只需输入代码 ->

/////////
Intent intent = new Intent();
intent.putExtra("username",savedUserName);
setResult(RESULT_OK, intent);
finish();
///////////

in logOut click and on back pressed to get back to the Log In Activity在注销中单击并按下返回以返回登录活动

您必须在进行 SuccessActivity 时完成 LoginActivity 并且在单击 Logout 按钮时您可以再次启动 LoginActivity 在那里您可以将数据从 SuccessActivity 传递到 LoginActivity 并通过检查getIntent.getExtras()是否为空来完成或者你可以检查getIntent.hasExtra()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM