如何在应用程序的最开始显示(模态)对话框?

时间:2012-08-02 21:33:38

标签: android modal-dialog android-activity alertdialog

在我的Android应用程序开始时,用户需要从备选列表中进行选择。这就是原因。

假设我有很长的项目列表,每个项目只属于一个类别。每个用户只对一个特定类别感兴趣。因此,当应用程序启动并且SharedPreferences不包含有关所选类别的任何信息时,应显示模式对话框 - 此处用户必须选择他或她感兴趣的类别。选择一个类别后,只显示该类别的项目。

到目前为止,我试图在Activity的onCreate()方法中实现这种行为,这显然不起作用。对话框未显示或至少不够长,以便我可以看到它。

说实话,我没想到代码可以从onCreate()调用它。但是,我无法在Activity中找到合适的事件处理程序,从那里我可以触发对话框。

应该从哪里触发此对话框以确保选择类别(在加载任何其他数据之前)?

提前致谢。

以下是代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    setContentView(R.layout.activity_item_list);
    ...
    ensureCategorySelected();
}

相关方法

private void ensureCategorySelected() {
    String chosenCategory = getCategoryFromSharedPreferences();

    if (chosenCategory != null) {
        final CharSequence[] items = getCategories();

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Choose category");
        builder.setItems(items, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                // handle the selection of the category
            }
        });
        AlertDialog alert = builder.show();
    }
}

1 个答案:

答案 0 :(得分:2)

那里有一个逻辑问题。您希望在仍未保存首选项时显示对话框,并在保存首选项时显示该对话框。将其更改为chosenCategory == null,它应该可以正常工作。

为什么你不希望代码在onCreate()中运行?我没有看到在那里打开对话框的问题。

编辑:我不太确定onCreate()是否是显示对话框的正确位置。尝试将ensureCategorySelected()放在onStart()而不是onCreate()。

您还可以考虑为此实施一项活动,您可以从startActivityForResult()开始。