动态设置android:noHistory属性

时间:2014-07-23 23:55:39

标签: android android-activity

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

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

1 个答案:

答案 0 :(得分:2)

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

  1. 创建一个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();
            }
        }
    }
    
  2. 任何你不想留下的课程都应该延伸LoginFinisherActivity

  3. 当你到达一个你不知道那些活动的地方时,通过发送广播来消除它们(例如在其他一些活动的onCreate()中):sendBroadcast(new Intent(LoginFinisherActivity.ACTION_FINISH_LOGIN));

  4. 总结一下:在你的场景中基本上有两类活动 - 你想要清理的早期活动 - 让我们把它们称为“注册”活动和活动,当你完成上一个流程时(可能只是您应用中的单个活动?) - 让我们称之为“登陆”活动。因此,您需要做的就是让所有“注册”活动延长LoginFinisherActivity以及所有“登陆”活动,以便在sendBroadcast(new Intent(LoginFinisherActivity.ACTION_FINISH_LOGIN));中致电onCreate()

    我希望这适合你!