我正在使用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上访问过很多相关帖子。很少有人说,在首选项中保存状态(选择/取消选择),我可以保存在首选项中,但是当再次打开对话框时,如何在多层语言对话框中显示那些保存的参考(选择/取消选择)。
答案 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();