ftk学习记(list篇)
【声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
在开始今天的list主题之前,先看一下icon的运行效果。
今天说的list其实和这个icon差不多。大家只需要把这些icon想像成一条一条的item就可以了。同样,list的demo代码中也会有一个more的button,每次单击一下,就会增加几个item。闲话不多说,先看一下demo代码是怎么样的。
#include "ftk.h"#include "ftk_list_view.h"
#include "ftk_list_render_default.h"
#include "ftk_list_model_default.h"#define IDC_TEST_BUTTON 1000
int g_index = 0;
FtkBitmap* left_icon = NULL;
FtkBitmap* right_icon = NULL;static Ret button_quit_clicked(void* ctx, void* obj)
{ftk_quit();return RET_OK;
}static Ret button_more_clicked(void* ctx, void* obj)
{int i = 0;char text[32] = {0};FtkListItemInfo info = {0};FtkListModel* model = ctx;for(i = 0; i < 4; i++){g_index++;ftk_snprintf(text, sizeof(text), "item%04d", g_index);info.text = (text);info.left_icon = left_icon;info.right_icon = right_icon;info.type = g_index%4;ftk_list_model_add(model, &info);}return RET_OK;
}Ret on_item_clicked(void* ctx, void* list)
{FtkListItemInfo* info = NULL;FtkListModel* model = ftk_list_view_get_model(list);int i = ftk_list_view_get_selected(list);ftk_list_model_get_data(model, i, (void**)&info);if(info != NULL){info->state = !info->state;}ftk_logd("%s: %d/%d\n", __func__, ftk_list_view_get_selected(list),ftk_list_model_get_total(model));return RET_OK;
}int FTK_MAIN(int argc, char* argv[])
{int width = 0;int height = 0;char text[32] = {0};FtkWidget* win = NULL;FtkWidget* button = NULL;FtkWidget* list = NULL;FtkListModel* model = NULL;FtkListRender* render = NULL;FtkListItemInfo info = {0};char filename[FTK_MAX_PATH+1] = {0};ftk_init(argc, argv);win = ftk_app_window_create();width = ftk_widget_width(win);height = ftk_widget_height(win);list = ftk_list_view_create(win, 10, 5, width - 20, 3 * height/4-5);ftk_list_view_set_clicked_listener(list, on_item_clicked, NULL);model = ftk_list_model_default_create(10);render = ftk_list_render_default_create();ftk_snprintf(filename, FTK_MAX_PATH, "%s/alarm/%s",TESTDATA_DIR, FTK_STOCK_IMG_SUFFIX);left_icon = ftk_bitmap_factory_load(ftk_default_bitmap_factory(), filename);ftk_snprintf(filename, FTK_MAX_PATH, "%s/search/%s", TESTDATA_DIR, FTK_STOCK_IMG_SUFFIX);right_icon = ftk_bitmap_factory_load(ftk_default_bitmap_factory(), filename);g_index = 0;for(g_index = 0; g_index < 4; g_index++){ftk_snprintf(text, sizeof(text), "item%04d", g_index);info.text = (text);info.left_icon = left_icon;info.right_icon = right_icon;info.type = g_index%4;ftk_list_model_add(model, &info);}ftk_list_view_init(list, model, render, 40);ftk_list_model_unref(model);button = ftk_button_create(win, width/4, 3 * height/4 + 5, width/4, 60);ftk_widget_set_text(button, "more");ftk_button_set_clicked_listener(button, button_more_clicked, model);button = ftk_button_create(win, width/2, 3 * height/4 + 5, width/4, 60);ftk_widget_set_text(button, "quit");ftk_button_set_clicked_listener(button, button_quit_clicked, win);ftk_window_set_focus(win, button);ftk_widget_set_text(win, "list view demo");ftk_widget_show_all(win, 1);ftk_widget_set_attr(win, FTK_ATTR_QUIT_WHEN_CLOSE);ftk_run();return 0;
}
细细看来,代码的流程非常眼熟。大家可以把注意力集中到list、model、render和info这几个变量上。其中,尤其需要注意的是list和info。list提供了一个显示空间,而info则用来表示每一个list的item。当然,每一个list item被选中的时候,on_item_clicked函数都会被调用。当然,除此之外系统也创建了两个button,两个callback函数分别是button_quit_clicked和button_more_clicked。具体的细节分析一下代码即可。
好了,说了这么多,还是等着看下次的运行效果吧。
ftk学习记(list篇)相关推荐
- ftk学习记(消息框篇)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 上一篇说到了输入框.闲话不多说,首先看结果显示, 大家看看效果是不是和我们之前说的一样.今天, ...
- ftk学习记(首篇)
[ 声明:版权全部,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 非常早之前就知道ftk了,当时主要是由于买了李先静的书,所以知道了这么一个项目.由于对这样的g ...
- ftk学习记(label篇)【转】
转自:http://blog.csdn.net/feixiaoxing/article/details/25000093 版权声明:本文为博主原创文章,未经博主允许不得转载. [ 声明:版权所有,欢迎 ...
- ftk学习记(滑动条篇)
[声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 前一篇说到了combox,就先看一下效果吧. 说完了combox,就谈谈今天的滑动条.滑动条,当 ...
- ftk学习记(脚本篇)
[声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 上一篇说到了对话框,今天就看看结果. 对话框不复杂,今天我们就来谈一谈脚本.有过android开 ...
- ftk学习记(button篇)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 前面,我们说到了label,这里可以看一下label运行的效果是怎么样的. 大家可以对照上面的 ...
- ftk学习记(image显示篇)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 前面说到了scroll bar,下面还是首先看一下效果图. 说完了滑动条.下面就来谈一谈ima ...
- ftk学习记(combox篇)
[声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 上一篇文章谈到了多窗口,还是按照约定看一下效果是什么样的. 如果大家细心一点,就会发现窗口中的l ...
- ftk学习记(多窗口篇)
[声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 在上周末的博客中,我们谈到了list view,今天可以看看效果图如何. 如果大家细心一点,可以 ...
最新文章
- 加密解密、食谱、新冠序列,各种有趣的开源项目Github上都有
- go语言学习(5)协程
- EF sqlite3报错 System.Data.Entity.Core.EntityException: 在提供程序连接上启动事务时出错。有关详细信息,请参阅内部异常。...
- python的empty函数_python中numpy.empty()函数的用法
- prefetch 和preload_preload_prefetch
- Smali 语法文档
- 让你认识Android 开发简介及应用程序架构示例
- Atitit 圣爱提拉克斯在会议上 2019年10月中旬的一天,有过这样的事。 这天,地方上风大。出乎人们意料之外,到东海岸一个地方访问的亲爱的领导者圣爱提拉克斯要同人们一道开会。主持人着了慌,
- wx.getUserProfile is not a function
- Android 11.0 12.0系统添加水印(仿安全模式水印)
- SqlServer 备份数据库语句
- Windows XP SP3正式发放 官方下载
- [含论文+任务书+中期检查表+答辩PPT+源码等]基于javaweb的政府机关公文收发系统
- 非线性光纤光学_多模光纤中的非线性光学
- 软件体系结构复习指南
- selenium自动化学习--截取长图的方法
- http://wsj356428476.iteye.com/blog/1655032
- 移动二班钟静雯1853230244 0416
- 英语水平测试项目----总结遇到的问题
- iOS保存视频、图片到相册