0

在我的 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();
    }
}
4

1 回答 1

2

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

为什么你没想到代码可以工作onCreate()?我没有看到在那里打开对话框的问题。

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

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

于 2012-08-02T21:39:21.383 回答