首页 > 解决方案 > 删除 Firebase 用户并返回登录

问题描述

我正在创建一个 Firebase 项目,它在导航抽屉中有一个设置选项,其中有一个删除用户的按钮。如果用户单击按钮,我会向他显示我的警报对话框,如果他按下是,我希望他从 Firebase 数据库中删除,并且作为用户,敬酒并返回登录屏幕。一切正常,但是在我打算进入我的 Login.class 后,如果我单击后退按钮,它会将我移回设置选项卡,就好像用户仍然登录(但他没有登录,它已被删除)。有没有办法完成那个片段以便无法回到那里?这是我的代码。

片段设置.class

public class FragmentSettings extends Fragment {

Button delete, change, rateus;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_settings, container, false);

    final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    final FirebaseDatabase mDatabase = FirebaseDatabase.getInstance();

    delete = v.findViewById(R.id.settings_delete);
    delete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new AlertDialog.Builder(getContext(), R.style.MyDialogTheme)
                    .setMessage("Are you sure you want to delete your account? This will permanently delete all of your information.")
                    .setCancelable(false)
                    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            //Deleting user info from database
                            mDatabase.getReference().child(user.getUid()).removeValue();
                            //Deleting user.
                            user.delete();
                            //Signing out and back to login.
                            FirebaseAuth.getInstance().signOut();
                            Intent intent = new Intent(getContext(),Login.class);
                            Fragment fragment = getFragmentManager().findFragmentById(R.id.fragment_container);
                            if(fragment != null)
                                getFragmentManager().beginTransaction().remove(fragment).commit();
                            startActivity(intent);

                        }
                    })
                    .setNegativeButton("No", null)
                    .show();

        }
    });
    change = v.findViewById(R.id.settings_change);
    change.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            changeFragment();
        }
    });
    rateus = v.findViewById(R.id.settings_rateus);
    rateus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(v.getContext(), "App will be in App-Store soon!", Toast.LENGTH_SHORT).show();
        }
    });

    return v;
}

private void changeFragment() {
    FragmentChangePassword newChangePasswordFragment = new FragmentChangePassword();
    FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.fragment_container, newChangePasswordFragment);
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
}

}

标签: androidfirebaseandroid-fragmentsandroid-intentfragment

解决方案


在调用finish()登录活动的意图后调用。像这样:

//Signing out and back to login.
FirebaseAuth.getInstance().signOut();
Intent intent = new Intent(getContext(),Login.class);
Fragment fragment = getFragmentManager().findFragmentById(R.id.fragment_container);
if(fragment != null)
    getFragmentManager().beginTransaction().remove(fragment).commit();
    startActivity(intent);
    finish();

推荐阅读