当前位置: 首页 > 知识库问答 >
问题:

活动从后台返回时自动关闭

钱凌
2023-03-14

在我的应用程序中,当我从后台回来时,我的活动会自动接近,并且它总是显示以前的活动。示例:我用活动A启动应用程序

public class EnterOtpActivity extends ChoosePhotoBaseActivity {
private ActivityEnterOtpBinding mBinding;
private EnterOtpModel model;
private String name;
private String prefix;
private String phone;
private String password;
private int spinnerPos;
private UserApi.FacebookLoginDetails fbLoginDetails = null;

@NonNull
@Override
protected Map<ImageView, Transformation<Bitmap>> getImageViewsMap() {
    return null;
}

@Override
protected void handleLoadedFile(@NonNull File imageTempFile) {
    imageCropped(Uri.fromFile(imageTempFile));
}

public void imageCropped(@NonNull Uri croppedImageUri) {
    model.mEditAvatarUri = croppedImageUri;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mBinding = DataBindingUtil.setContentView(this, R.layout.activity_enter_otp);
    mBinding.setModel(model = new EnterOtpModel(this, mBinding));
    Bundle bundle = getIntent().getExtras();
    if (bundle != null) {
        if (bundle.containsKey(BundleKeyUtils.REGISTRATION)) {
            UserDetailsForOTPVo userDetailsForOTPVo = (UserDetailsForOTPVo) bundle.getSerializable(BundleKeyUtils.REGISTRATION);
            name = userDetailsForOTPVo.getName();
            prefix = userDetailsForOTPVo.getPrefix();
            phone = userDetailsForOTPVo.getContactNumber();
            password = userDetailsForOTPVo.getPassword();
            spinnerPos = userDetailsForOTPVo.getSpinnerPosition();
            model.setContactNumber(prefix, phone);
        } else if (bundle.containsKey(BundleKeyUtils.FB_REGISTRATION)) {
            fbLoginDetails = (UserApi.FacebookLoginDetails) bundle.getSerializable(BundleKeyUtils.FB_REGISTRATION);
            prefix = fbLoginDetails.getPhone_country_code();
            phone = fbLoginDetails.getPhone();
        }
    }
    mBinding.editOtp.setFilters(new InputFilter[]{new InputFilter.LengthFilter(4)});
    model.setTimer();
    setContinueAction();
    otpTextWatcher();
    setOnOtpRequest();
    File f = new File(getApplicationContext().getCacheDir(), "temp");
    Uri imageUri = Uri.fromFile(f);
    model.mEditAvatarUri = imageUri;

    mBinding.textContinue.setEnabled(false);
}

private void setOnOtpRequest() {
    mBinding.textOTp.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showOTPDialog();
        }
    });
}

private void setContinueAction() {
    mBinding.textContinue.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mBinding.textContinue.setVisibility(View.INVISIBLE);
            mBinding.progressContinue.setVisibility(View.VISIBLE);
            mBinding.imgvArrow.setVisibility(View.INVISIBLE);
            if (fbLoginDetails == null) {
                model.onContinueAction(prefix, phone, password, name, mBinding.editOtp.getText().toString(), spinnerPos);
            }else {
                //TODO FB web call
                fbLoginDetails.setOTP_code(mBinding.editOtp.getText().toString());
                model.onFbLoginAction(fbLoginDetails, () -> {
                    mBinding.textContinue.setVisibility(View.VISIBLE);
                    mBinding.progressContinue.setVisibility(View.INVISIBLE);});
            }
        }
    });
}


public void otpTextWatcher() {
    mBinding.editOtp.addTextChangedListener(new SimpleTextWatcher() {
        @Override
        public void onTextChanged(@NonNull String newText) {
            super.onTextChanged(newText);
            if (newText.length() == 4) {
                mBinding.textContinue.setEnabled(true);
                mBinding.textContinue.setBackgroundResource(R.drawable.button_background_selector);
            }else {
                mBinding.textContinue.setEnabled(false);
                mBinding.textContinue.setBackgroundResource(R.drawable.bg_rounded_button_light_orange);
            }
        }
    });
}

public void showOTPDialog() {
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(new ContextThemeWrapper(EnterOtpActivity.this,
            R.style.DialogDark));
    String meddleD = getResources().getString(R.string.dialog_msg_sms_middle);
    alertDialogBuilder.setMessage(getResources().getString(R.string.dialog_msg_sms_will_be) +" "+ prefix + phone +meddleD+getResources().getString(R.string.dialog_is_this_number_correct));
    alertDialogBuilder.setCancelable(false);
    alertDialogBuilder.setPositiveButton(R.string.fragment_contacts_invite_sms_ok, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            dialog.dismiss();
            mBinding.textOTp.setVisibility(View.INVISIBLE);
            mBinding.progressLogIn.setVisibility(View.VISIBLE);
            mBinding.editOtp.setText("");
            model.reSendOtpRequest();
        }
    });
    alertDialogBuilder.setNegativeButton(R.string.edit, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

            dialog.dismiss();
            finish();
        }
    });
    alertDialogBuilder.show();
}

//disable back button

@Override
public void onBackPressed() {
    // do nothing
}

@Override
protected void onPause() {
    super.onPause();
}

@Override
protected void onResume() {
    super.onResume();
}

}

共有1个答案

亢仰岳
2023-03-14

我在代码中找到了罪魁祸首,实际上在以前的实现中,他们在Manifests.xml中为该活动添加了noHostory=“true”,这就是它关闭的原因。

 类似资料:
  • 我已经为Android制作了一个TicTacToe游戏,为了开始一个新游戏,我调用让用户在新的Act 但问题来了:整个SurfaceView只是一个黑色区域,直到我点击某个地方,然后它就会像它应该的那样运行:方法被调用,游戏变得可见。 我有什么办法摆脱黑屏吗?我已经尝试在onResume()/onPause期间将LinearLayout和SurfaceView设置为可见/不可见。而或也不起作用。

  • 前提条件: AndroidQ 问题一: 我在前台有一个视图,当用户单击该视图时,我尝试在android Q中启动一个活动。 以下是我的代码。 它不工作,也不会发生碰撞。我有一些日志。 D ActivityTaskManagerServiceInjector: MIUILOG-权限拒绝活动:意图... 问题2: 我有一个TileService,当用户单击状态栏中的图标时,我尝试启动一个活动 雄激素单

  • 我在活动C中有四个片段,它们的行为就像标签一样。我必须从一个片段转到一个新的活动X。现在我想回到从活动X到片段的片段。 这是我的主要活动 '公共类MainInterface扩展了ActionBarActivity{ } ' 下面是活动视图中的公共类讨论。onclick侦听器{ ###

  • 我正在制作一个应用程序,使用ActivityRecognition API跟踪用户在后台的活动,如果用户在指定的时间段(例如1小时)内保持在同一位置,则系统会推送通知,告诉用户散步。我已经实现了活动识别,但仅适用于打开应用程序的情况。显然,Google API客户端需要保持连接才能发送活动更新。我的问题是-对于后台活动跟踪,什么是更好的解决方案: 1)在主活动(或单独活动)中实现警报管理器,该活动

  • 我在一个活动中有一个列表视图,在自定义适配器中有一个信息图标。当用户点击该信息按钮时,下一个活动将打开,当用户点击更新按钮时,在下一个活动中标记出勤率后,第二个活动应该完成,第一个活动列表视图应该更新。 我成功地做了什么:我已经成功地标记了出席情况并更改了listview的颜色,但我在关闭第二个活动并重新启动第一个活动后这样做了。通过这种方式,由于再次开始活动,listview会得到更新。 我无法

  • 单击按钮转到另一个活动,然后返回到原始活动。 我试图保存两个整数离开活动的另一个活动,然后稍后当我返回到原来的活动,我得到一个null包。 有人知道为什么这不起作用吗? 我使用savedInstanceState bundle在屏幕旋转时保存变量,它在这种情况下工作,但是当我离开查看另一个活动并稍后返回此活动时,该bundle没有保存。返回时获取空值。 onSavedInstanceState方法