我被困在一块岩石和一个困难的地方之间。我正在开发一个显示欢迎页面并要求用户注册或登录的应用程序。用户可以通过插入符号按钮和电话的后退按钮进入和从注册/登录活动到主要活动(欢迎页面)之间。

但是,一旦用户登录或创建帐户,我希望从应用程序堆栈中删除主要活动(欢迎页面)和先前活动(可以是登录活动或注册活动),以便当用户点击后退时按钮,他们将退出应用程序,而不是返回他们来自的活动(登录或注册)。
我无法在注册中设置android:noHistory="true"并在AndroidManifest中登录活动,因为这也意味着从该特定活动中退出应用程序,而不是返回欢迎页面。
那么,如何在达到特定活动后在这些活动上动态设置noHistory标志?也许我想到的应用程序流程有问题。
感谢您的帮助,谢谢!

最佳答案

我建议您使用广播接收器关闭不需要的活动。我将在这里概述步骤:-


创建一个Acitvity用作悬挂Acitivies的超类。他们将收听自定义广播消息,并在收到消息时调用finish()。

public class LoginFinisherActivity extends Activity {
    private FinishReceiver finishReceiver;
    public static final String ACTION_FINISH_LOGIN = "ACTION_FINISH_LOGIN";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        finishReceiver= new FinishReceiver();
        registerReceiver(finishReceiver, new IntentFilter(ACTION_FINISH_LOGIN));
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(finishReceiver);
    }

    private final class FinishReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(ACTION_FINISH_LOGIN))
                finish();
        }
    }
}

您不希望悬挂的任何类都应扩展LoginFinisherActivity
当您知道自己不再需要这些活动时,可以通过发送广播来摆脱它们(例如,在其他一些活动的onCreate()中):sendBroadcast(new Intent(LoginFinisherActivity.ACTION_FINISH_LOGIN));


总结一下:本质上,您的场景中有两类活动-您想要清理的早期活动-让我们将它们称为“注册”活动和在完成上一个流程时所要进行的活动(这可能只是您的应用中有一项活动?)-我们称其为“着陆”活动。因此,您需要做的所有事情都是使您的所有“注册”活动扩展LoginFinisherActivity,并且所有您的“着陆”活动都必须在其sendBroadcast(new Intent(LoginFinisherActivity.ACTION_FINISH_LOGIN));中调用onCreate()

希望这对您有用!

07-24 20:38