从小部件开始活动&忽略后台堆栈

时间:2011-10-03 10:30:02

标签: android

让我们考虑简单的数据库访问应用程序,它有两个活动:

  • A - 来自DB的条目列表
  • B - 用于向DB输入新数据的输入表单,带有两个按钮:保存/取消

应用程序以A(列表)开头,用户可以转到B(输入表单)。

为了更有效地输入新数据,我创建了一个小部件直接跳转到B(PendingIntent)。

应用程序的观察行为如下:

  1. 如果用户的第一个动作是小部件(空背堆栈)=>应用程序打开B,当用户单击“保存”或“取消”活动完成后,焦点将返回到Android桌面。
  2. 如果之前启动了主应用程序(A在后台堆栈上)=> B仍然可以从窗口小部件正确打开,但是当用户单击“保存”或“取消”焦点返回到A
  3. 当用户从A启动B时,2中描述的行为是正常的。但是当我从小部件启动B时我想避免它。

    任何提示?

1 个答案:

答案 0 :(得分:0)

我有一种情况需要做类似的事情。我的快速解决方法是为小部件启动的Intent添加"EXTRA_LAUNCHED_BY_WIDGET" Extra。然后,在我的活动中,我将其视为特例。

我需要覆盖Back按钮行为,但您可以在其他地方轻松使用此案例,例如在其他重写的活动方法中。

  @Override
  public void onBackPressed()
  {
    Bundle extras = getIntent().getExtras();

    boolean launchedFromWidget = false;

    if (extras.containsKey("EXTRA_LAUNCHED_BY_WIDGET"))
    {
      launchedFromWidget = extras.getBoolean("EXTRA_LAUNCHED_BY_WIDGET");
    }

    if (launchedFromWidget)
    {
      // Launched from widget, handle as special case
    }
    else
    {
      // Not launched from widget, handle as normal
    }    
  }