急切求助:如何让弹出的CAknListQueryDialog中的checkbox都不选择?
在使用CAknListQueryDialog的过程中发现一个让我很郁闷问题:
使用CAknListQueryDialog,弹出一个带有复选列表的对话框,我把所有的checkbox都设置成未选择,在按左软键确定的时候,焦点所在的checkbox就会被选择,这样在if(dialog->RunLD()){}中取得的选中状态的数据就包含了一条选中的数据,这样这个复选列表永远不可能实现全部不选的情况,
请问下有没办法解决这个问题呢?谢谢
[最优解释]
没说过是Listbox的问题。自己定制的话可以重新实现确认按钮的行为,
不过你可以先尝试重写CAknListQueryDialog的确认按钮的行为,只是可能不会有好的结果。
[其他解释]
这个类的行为就是这样子。可以自定义一个列表,然后放在对话框中显示。Nokia wiki中有相关文章,搜索“custom control”。
[其他解释]
首先谢谢你的回答。
你的意思是我自定义一个含有checkbox的ListBox?然后用自定义的这个ListBox取代我资源文件中配置的ListBox?
但是我怎么觉得这个问题的原因不是ListBox的问题啊,感觉是CAknListQueryDialog自带的那个“确认”按钮的事件处理的问题,感觉点击确定后CAknListQueryDialog对ListBox做了一个检查,如果没有被选中的checkbox就默认选中当前焦点所在的checkbox,假如有选中的话就不再选中当前焦点的checkbox。
这个CAknListQueryDialog是通过资源文件创建的。创建代码如下:
RESOURCE AVKON_LIST_QUERY r_detail_container_checkboxgroup
{
items =
{
AVKON_MULTISELECTION_LIST_QUERY_DLG_LINE
{
control = AVKON_LIST_QUERY_CONTROL
{
heading = "Select items:";
listtype = EAknCtSingleGraphicPopupMenuListBox;
listbox = AVKON_MULTISELECTION_LIST_QUERY_LIST
{
};
};
}
};
}
c++的代码如下:
CAknListQueryDialog* query =
new (ELeave) CAknListQueryDialog(iRtnIndex);//为了在RunLD()后的逻辑块中取得选中的索引
query->PrepareLC(R_DETAIL_CONTAINER_CHECKBOXGROUP);
query->SetItemTextArray(iListQueryItemArray);
// keep ownership of the item array. Only call this after setting the item array!
query->SetOwnershipType(ELbmDoesNotOwnItemArray);
query->ListBox()->SetSelectionIndexesL(iRtnIndex);//为了设置默认选中项
if (query->RunLD())
{
//iRtnIndex中包含选中的行的索引,iListQueryItemArray放置的是每个checkbox的label内容
.............
}
------其他解决方案--------------------
重写CAknListQueryDialog的确认按钮事件,我也是这么想的,但这会带来很多潜在的问题以及时间上的开销;但是仔细一想,symbian s60操作系统不会这么弱智吧,弹出的多选列表窗口不允许不选择?
在android上的开发经验让我感觉这个问题symbian应该解决了吧,所以我以为有哪个标志位没设置对呢,现在看来这个问题是symbian当时的设计没考虑周全导致的呢还是我没使用对控件导致的呢?