0

我是 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' 是 type 的对象contact,它将联系人相关信息存储在它自己的类中。Db是一个包含我的数据库访问函数的类 - 它似乎是存储需要从任何地方访问的公共变量的好地方。

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

我的理想流程是伪代码:

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

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

4

2 回答 2

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使用键“edit”以这种方式简单地传递一个值并检查是否为真。如果是,那就去EditScreen如果不去任何你需要的地方。我希望这有帮助。如果我误解了,请告诉我。

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

于 2013-06-28T14:42:22.837 回答
1

实际上,android 有一个关于活动“流程”的哲学,这里介绍了。 由于您是新的 android 开发人员,因此必须了解活动的工作方式。

根据您问题中的信息,您似乎没有遵循 android 指南,这不一定是一件坏事,但您必须有充分的理由不这样做。因此,通过您问题的编程视图,我建议您在未选择联系人时禁用编辑和删除按钮,或者如果您愿意,可以根据选择或显示的数据限制用户的选择。

但是,您询问的是“流程”,因此我的建议是更多地研究活动以及后台堆栈的工作方式,并查看 sdk 示例。在大多数应用程序中,用户可以根据选择的数据进行一些操作,这些操作在长按记录后呈现给用户。在您的情况下,伪流将是这样的:

查找活动 --> 结果 --> 单击结果 --> 选择列表(编辑、删除等) --> 编辑或删除活动(编辑后返回结果)

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

希望这可以帮助...

于 2013-06-28T14:53:18.667 回答