显示以前选择的行 - Multichoice DialogBox Android

时间:2017-01-19 05:45:41

标签: android alertdialog

我正在使用Multichoice对话框,我可以显示对话框,选择/取消选择行但我无法显示以前选择的行。 这是我的代码

final CharSequence[] items = eventTypeStr.split(",");    
AlertDialog dialog = new AlertDialog.Builder(activity).setTitle("Event Types")
                        .setMultiChoiceItems(items, null, new DialogInterface.OnMultiChoiceClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int indexSelected, boolean isChecked) {

                            }
                        }).setPositiveButton("OK", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int id) {
                            }
                        }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int id) {
                                //  Your code when user clicked on Cancel
                            }
                        }).create();
                dialog.show();

我在stackoverflow上访问过很多相关帖子。很少有人说,在首选项中保存状态(选择/取消选择),我可以保存在首选项中,但是当再次打开对话框时,如何在多层语言对话框中显示那些保存的参考(选择/取消选择)。

2 个答案:

答案 0 :(得分:0)

要获取所选项,只需在DialogInterface.OnMultiChoiceClickListener()的onClick()方法中添加一些代码即可。添加代码后,你的onClick方法看起来应该是这样的。

声明一个列表,您可以添加所选项目的索引

private void GetTotalShareForDay()
{
    var results = new Dictionary<string,List<decimal>>();

    for (var i = 0; i < dgvSummary.Rows.Count; i++)
    {
        string laborerId = dgvSummary.Rows[i].Cells[0].Value.ToString();
        string date = dgvSummary.Rows[i].Cells[1].Value.ToString();

        string uniqueKey = laboredId + ","  + date; // Looking at your data, this should provide a unique ID

        decimal share = Convert.ToDecimal(dgvSummary.Rows[i].Cells[5].Value);

        if (!results.ContainsKey(uniqueKey)) 
            results.Add(uniqueKey, new List<decimal>());
        results[uniqueKey].Add(share);
    }

    foreach(var key in results.Keys)
    {
        // key is laborerID + "," + date
        var sum = results[key].Sum();
    }
}

现在您知道所有选定项目的索引,以便您也可以轻松找到相应的值。希望这会有所帮助。

答案 1 :(得分:0)

DarkShadow的回答帮助了我,但它并不完全符合要求。 学习AlertDialog API后,我找到了答案。 以前我传递null作为 setMultiChoiceItems 的第二个参数,现在第二个参数将是所选/未选择项的布尔数组。这就是我所需要的。 更新的代码应为:

    final CharSequence[] items = eventTypeStr.split(",");    
AlertDialog dialog = new AlertDialog.Builder(activity).setTitle("Event Types")
                        .setMultiChoiceItems(items, arrayOfCheckedUncheckedItems, new DialogInterface.OnMultiChoiceClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int indexSelected, boolean isChecked) {

                            }
                        }).setPositiveButton("OK", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int id) {
                            }
                        }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int id) {
                                //  Your code when user clicked on Cancel
                            }
                        }).create();
                dialog.show();