现在的位置: 首页 > 综合 > 正文

CAknSettingItemList中使用CAknEnumeratedTextPopupSettingItem使用心得

2013年12月13日 ⁄ 综合 ⁄ 共 3355字 ⁄ 字号 评论关闭

CAknSettingItemList中使用CAknEnumeratedTextPopupSettingItem使用心得

CAknSettingItemList是一个控件,而CAknEnumeratedTextPopupSettingItem不是一个控件。只是在CAknSettingItemList中设置了一种列表的方式。

//--------------------------------------.rss文件--------------------------------------
RESOURCE POPUP_SETTING_LIST r_popup_setting_list
    {
    flags = 0;
    }

RESOURCE AVKON_SETTING_PAGE r_enumeratedtext_setting_page
    {
    type = EAknCtPopupSettingList;
    editor_resource_id = r_popup_setting_list;
    }

RESOURCE AVKON_POPUP_SETTING_TEXTS r_popup_setting_texts
    {
    setting_texts_resource = r_texts;
    }

RESOURCE ARRAY r_texts
    {
    items =
        {
        AVKON_ENUMERATED_TEXT
            {value=0; text = "dummy";}
        };
    }

RESOURCE AVKON_SETTING_ITEM_LIST r_entry_settings_list
    {
    title = "Example";
    }

//--------------------------------------创建列表--------------------------------------
1.Container的头文件中
CAknSettingItemList* iItemList;
TInt iEnumText1;

//此函数用于创建CAknEnumeratedTextPopupSettingItem列表项
void LoadListL();   

//获取列表选中的内容
void GetCurSelect();

//设置列表选中的内容
void SetCurSelect();

//这三个为.cpp文件中的全局变量
_LIT(KName9, "Enumerated text");
_LIT(KEnumText1, "Enum text 1");
_LIT(KEnumText2, "Enum text 2");

2.Container的定义文件中
构造函数中设置为NULL
iItemList = NULL;

3.二段构造ConstructL()函数中
    iItemList = new (ELeave) CAknSettingItemList;
    iItemList->SetMopParent(this);
    iItemList->ConstructFromResourceL(R_ENTRY_SETTINGS_LIST);
    iItemList->SetFocus(ETrue);

    LoadListL();

    iItemList->MakeVisible(ETrue);
    iItemList->SetExtent(aRect.iTl, TSize(aRect.Size().iWidth,
            aRect.Size().iHeight));
    iItemList->ActivateL();
    iItemList->ListBox()->UpdateScrollBarsL();
    //iItemList->DrawNow();

4.定义LoadListL()函数
void CMainContainer::LoadListL()
    {
    TBool isNumberedStyle = iItemList->IsNumberedStyle();
    CArrayPtr<CGulIcon>
            * icons =
                    iItemList->ListBox()->ItemDrawer()->FormattedCellData()->IconArray();

    /*Enumerated text setting item*/
    CAknEnumeratedTextPopupSettingItem* item9 =
            new (ELeave) CAknEnumeratedTextPopupSettingItem(1, iEnumText);
    CleanupStack::PushL(item9);
    // The same resource id can be used for multiple enumerated text setting pages.
    item9->ConstructL(isNumberedStyle, 9, KName9, icons,
            R_ENUMERATEDTEXT_SETTING_PAGE, -1, 0, R_POPUP_SETTING_TEXTS);

    // Load texts dynamically.
    CArrayPtr<CAknEnumeratedText>* texts = item9->EnumeratedTextArray();
    texts->ResetAndDestroy();
    CAknEnumeratedText* enumText;
    // Text 1
    HBufC* text = KEnumText1().AllocLC();
    enumText = new (ELeave) CAknEnumeratedText(0, text);    //0代表此条记录的编号
    CleanupStack::Pop(text);
    CleanupStack::PushL(enumText);
    texts->AppendL(enumText);
    CleanupStack::Pop(enumText);
    // Text 2
    text = KEnumText2().AllocLC();
    enumText = new (ELeave) CAknEnumeratedText(1, text);    //1代表此条记录的编号
    CleanupStack::Pop(text);
    CleanupStack::PushL(enumText);
    texts->AppendL(enumText);
    CleanupStack::Pop(enumText);

    iItemList->SettingItemArray()->AppendL(item9);
    CleanupStack::Pop(item9);

    // Required when there is only one setting item.
    iItemList->SettingItemArray()->RecalculateVisibleIndicesL();

    iItemList->HandleChangeInItemArrayOrVisibilityL();
    }

5.定义获取选中的值
void CMainContainer::GetCurSelect()
    {
    iItemList->StoreSettingsL();
    iEnumText1;    //此时iItemList列表已经更新,选中的值已经反映到iEnumText1中

    }

6.设置选值
void CMainContainer::SetCurSelect()
    {
    iItemList->StoreSettingsL();    //更新列表
   
    iEnumText1 = 1;    //设置1为当前选中的内容
   
    iItemList->LoadSettingsL();    //加载设置
    iItemList->DrawDeferred();    //刷新

    }

抱歉!评论已关闭.