创建一个不那么线性的活动流

时间:2013-06-28 14:30:15

标签: android

我是Android开发的新手,并为自己设定了创建联系人管理应用程序的任务 - 只是为了提高我的技能。

用户可以使用所有常用的联系人编辑选项 - 查找联系人,新联系人,编辑联系人,删除联系人等。每个人都可以自行工作 - “查找联系人”将“选择”相应的联系人(将他们的ID存储在公共变量中)。如果在“选择”联系人时按“编辑”或“删除”,则这些功能可以正常工作。

但是当用户在没有选择联系人的情况下尝试按“编辑”或“删除”时会发生什么?简单的解决方案是显示消息“请选择一个联系人”,但这是糟糕的设计。如果应用程序需要用户输入,则应将其重定向到必要的活动以选择联系人。

因此,当用户点击“编辑”按钮时,我写了这么小的代码片段:

public void findContact(View view)
{
    Intent intent = new Intent(this, FindContactActivity.class);
    startActivityForResult(intent, 1);      
}

public void editContact(View view)
{
    if (Db.contact == null)
        findContact(null);
    else {
        // navigate to edit activity
    }
}

在这种情况下,“contact”是contact类型的对象,它将联系人相关信息存储在其自己的类中。 Db是一个包含我的数据库访问函数的类 - 它似乎是存储需要从任何地方访问的公共变量的好地方。

现在上面的代码显然工作正常。如果选择了联系人,那就太棒了 - 我们转到编辑屏幕。如果没有,我们转到查找联系人屏幕。但问题是用户选择联系后会发生什么?它不会再将它们带回编辑屏幕。

我的理想流程是伪代码:

editContact()
{
    if (contact is selected)
        editContact();
    else
    {
        findContact();
        // once found, go to edit contact screen
        editContact();
    }
}

请记住,我是Android开发的新手,我想知道是否有人可以给我一些关于创建应用程序'流程'的指示,如上所述。

2 个答案:

答案 0 :(得分:1)

如果我了解您的问题,可以采用多种方法。如果他们还没有选择联系人,我可能只是禁用“编辑”Button,因为如果没有选择任何内容,他们就无法尝试编辑。但是,如果这对您不起作用,那么您可以使用Intent传递一个标记。我有时做的一件事就是传递“源”标志。

点击编辑后未选择任何联系

Intent i = new Intent(Edit.this, FindContact.class);
i.putExtra("source", "edit");
startActivity(i);

然后在您的查找联系人中获取额外的

Intent intent = getIntent();
if ("edit".equals(intent.getStringExtra("source");
{
     // create intent for EditScreen

您也可以通过键“编辑”以这种方式传递boolean值,并检查是否为真。如果是,请转到EditScreen,如果没有,请转到您需要的地方。我希望这有帮助。如果我误解了,请告诉我。

您还会发现不同的Intent.FLAGS非常有价值的

答案 1 :(得分:1)

实际上,android有一个涵盖here.活动“流程”的哲学 由于您是一名新的Android开发人员,因此必须了解活动的运作方式。

根据您的问题中的信息,似乎您没有遵循Android指南,这不一定是坏事,但您必须有正当理由不这样做。因此,通过程序化查看您的问题,我建议您在未选择联系人时或根据需要禁用编辑和删除按钮,以根据所选或显示的数据限制用户的选择。

但是你问的是“流程”,所以我的建议是更多地研究活动以及后台堆栈的工作原理并查看sdk示例。在用户可以基于所选数据进行某些动作的大多数应用中,在长按记录之后将这些动作呈现给用户。在你的情况下,伪流程将是这样的:

查找活动 - >结果 - >点击结果 - >选择列表(编辑,删除e.t.c) - >编辑或删除活动(编辑后返回结果)

现在关于“创建一个不太线性的活动流程”IMO有点过于笼统。您可以根据需要使用设计中的技术(查看我的链接在顶部)或通过使用例如从后端堆栈中删除活动的finish方法来控制活动流。

希望这会有所帮助......