设置PIN屏幕

时间:2014-07-02 14:23:23

标签: android android-lifecycle

我创建了一个“输入PIN码”屏幕。此活动的活动将在活动A的onStart()中调用,如下所示 -

@Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        Log.d("pin", "on start 2");
        if (MainActivity.flag) {
            Intent intent = new Intent(con, PinActivity.class);
            MainActivity.flag = false;
            startActivity(intent);

        }
    }

但是,我只希望在用户从后台到前台时显示此活动。不是来自活动B(活动B来自活动A)。

这个逻辑依赖于这个MainActivity.flag的值,所以我设置它

    true
  1. onStop(),以便在进入前台时显示引脚屏幕。 和,
  2. 已将flag = false放入活动B的onBackPressed(),以便从B到A时不会显示图钉。
  3. 但逻辑上存在缺陷,因为引脚屏幕在从B到A时出现,而它不应该出现。 (PS - 如果你不理解我的问题,请让我澄清。)

2 个答案:

答案 0 :(得分:0)

您可以将额外的数据从B传递给A,以澄清它是从B到A,而不是从背景 然后在A中,显示Pin Activity的条件应检查是否存在额外数据。

Intent theintent = new Intent(A.this,B.java);
theintent.putExtra("fromB",true);
startActivity(theintent);

并检查活动A:

Intent i= getIntent();
i.getExtra("fromB");

答案 1 :(得分:0)

你要问自己的第一件事是:为什么你只是在从背景出来时才显示引脚活动?

为用户存储引脚是不是很有趣,这样他每次都不必重新键入它?您可以使用SharedPreference存储它,并仅在您没有任何存储的引脚时将用户重定向到此屏幕。然后,如果他想要手动修改引脚,则可以为用户添加一个按钮。

SharedPreference example

编辑:

如果你真的必须坚持这个工作流程,你可以这样:

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

    if (savedInstanceState == null)
    {
        Intent intent = new Intent(this, PinActivity.class);
        startActivity(intent);
    }
}

检查savedInstanceState确保仅在第一次创建活动时调用它,并且该活动应适合您的工作流程。