CompoundButton.OnCheckedChangeListener与RadioGroup.OnCheckedChangeListener冲突

今天开始学习ucore的lab。

按照lab0的文档,显示介绍了80386的4个工作模式:real-address
mode, protected mode, SMM mode, virtual 8086 mode.

ia-32-architectures-software-developer-system-programming-manual-VOL3_Feb2014中的Figure
2-3. Transitions Among the Processor’s Operating Modes是4个mode FSM。

在Lab
0的2.6节介绍了ucore的编程方法:用C实现C++的OOP思想:interface(API)。在Absolute C++的Chap
6的tip里面讲了:princeple of encapsulation is on: separate "interface" and
"implementation of class".

在http://www.tutorialspoint.com/cplusplus/cpp_interfaces.htm
里面讲了interface一般是用abstract class作为base class。

在 http://www.bottomupcs.com/abstration.html
详述了linux kernal, system with large C based code. 通过使用function
pointer来模拟C++的interface/class的OOP。

在 understanding and
using pointer in C 中的function pointer里面提到一个drawback: "One concern
regarding the use of function pointers is a potentially slower
running program. The processor may not be able to use branch prediction in
conjunction with pipelining."

这印证了ucore lab0的说法:“Core
的面向对象编程方法,目前主要是采用了类似
C++的接口(interface)概念,即是让实现 细节不同的某类内核子系统(比如物理内存分配器、调度器,文件系统等)有共同的操作方式
... 接口在 C 语言中,表现为一组函数指针的集合。放在 C++ 中,即为虚表。”

先复习一下 function pointer,
structure in C.


 1 /*
2 * function pointers in C as the interface in C++
3 * used widely in linux kernal, or lab0 of ucore
4 * Jun 8, 2014
5 *
6 * http://www.bottomupcs.com/abstration.html#ftn.d5e116
7 */
8
9 #include <stdio.h>
10
11 /* The API to implement */
12 struct greet_api {
13 int (*say_hello)(char *name);
14 int (*say_goodbye)(void);
15 };
16
17 /* Our implementation of the hello function */
18 int say_hello_fn(char *name) {
19 printf("Hello %s\n", name);
20 return 0;
21 }
22
23 /* Our implementation of the goodbye function */
24 int say_goodbye_fn(void) {
25 printf("Goodbye\n");
26 return 0;
27 }
28
29 /* A struct implementing the API */
30 /*
31 * Designated Initializers for Structures
32 * See <C primer plus 5th>
33 * the name of a function can be used to represent the address of the function
34 */
35 struct greet_api greet_api = { .say_hello = say_hello_fn, .say_goodbye =
36 say_goodbye_fn };
37
38 /* main() doesn‘t need to know anything about how the
39 * say_hello/goodbye works, it just knows that it does */
40 int main(int argc, char *argv[]) {
41 greet_api.say_hello(argv[1]);
42 greet_api.say_goodbye();
43
44 printf("%p, %p, %p\n", greet_api.say_hello, say_hello_fn, &say_hello_fn);
45
46 //exit(0);
47 return 0;
48 }

然后可以看看ucore是怎么用structure of function pointer去实现一个C++的interface。

在lab2/kern/mm/pmm.h里面的pmm_manager:


 1 // pmm_manager is a physical memory management class. A special pmm manager - XXX_pmm_manager
2 // only needs to implement the methods in pmm_manager class, then XXX_pmm_manager can be used
3 // by ucore to manage the total physical memory space.
4 struct pmm_manager {
5 const char *name; // XXX_pmm_manager‘s name
6 void (*init)(void); // initialize internal description&management data structure
7 // (free block list, number of free block) of XXX_pmm_manager
8 void (*init_memmap)(struct Page *base, size_t n); // setup description&management data structcure according to
9 // the initial free physical memory space
10 struct Page *(*alloc_pages)(size_t n); // allocate >=n pages, depend on the allocation algorithm
11 void (*free_pages)(struct Page *base, size_t n); // free >=n pages with "base" addr of Page descriptor structures(memlayout.h)
12 size_t (*nr_free_pages)(void); // return the number of free pages
13 void (*check)(void); // check the correctness of XXX_pmm_manager
14 };
15
16 extern const struct pmm_manager *pmm_manager;

然后在2.6.2.1
双向循环链表中学习了ucore中常用的数据结构。这在uc/os-II和freertos里面的freelistTable也用到了。

注意:ucore的double linked list 和C/C++里面的设计方法有点点区别。这是为了适应不同功能的双向链表:有保存task
table的,有空闲内存块列表,或者、内存页链表等等。

CompoundButton.OnCheckedChangeListener与RadioGroup.OnCheckedChangeListener冲突

时间: 2024-10-26 00:26:43

CompoundButton.OnCheckedChangeListener与RadioGroup.OnCheckedChangeListener冲突的相关文章

Android RadioGroup和RadioButton详解

实现RadioButton由两部分组成,也就是RadioButton和RadioGroup配合使用.RadioGroup是单选组合框,可以容纳多个RadioButton的容器.在没有RadioGroup的情况下,RadioButton可以全部都选中:当多个RadioButton被RadioGroup包含的情况下,RadioButton只可以选择一个.并用setOnCheckedChangeListener来对单选按钮进行监听 1 RadioGroup相关属性: 2 RadioGroup.getC

Android——RadioGroup和CheckBox

xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent&quo

Android初级教程小案例之单选框RadioGroup与复选框CheckBox

Android里面的单选框和html中的其实是一样的效果.这里用到两个控件:CheckBox和RadioGroup.直接上代码: radio.xml布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation=&quo

Android 学习笔记---获取RadioGroup的选定值

1,获取RadioGroup控件: RadioGroup radioGroup = (RadioGroup)findViewById(R.id.myRadioGroup); 2,获取RadioButton控件; RadioButton radioButton = (RadioButton)findViewById(radioGroup.getCheckedRadioButtonId()); 3,获取选中的radio的值: String text = radioButton.getText().t

Android学习笔记:常用控件 RadioGroup和CheckBox

RadioGroup和CheckBox是android的常用控件,本文自做简单介绍和学习笔记,所以所用的控件样式选用android默认的样式. 先看下代码实现的效果图 图中,上面两个(male和female)为一个RadioGroup中的两个RadioButton,下面三个为CheckBox. 一个RadioGroup里面的内容只可单选,CheckBox可多选. 接下来是代码部分 布局文件代码activity_main.xml : <LinearLayout xmlns:android="

CheckBox和RadioButton以及RadioGroup

CheckBox:复选框 有两种状态 选中状态(true),未选状态(false) 属性 android:checked= "false"(表示该复选框未被选中) RadioGroup与RadiosButton 单独一个RadioButton一旦按下,取消是比较麻烦的,因此不建议单独使用RadioButton. 首先看RadioGroup 他是RadioButton的一个集合,提供多选一机制. RadioGroup属性,android:orientation="vertica

android 控件之RadioGroup&amp;RadioButton

RadioButton和RadioGroup的关系: 1.RadioButton表示单个圆形单选框,而RadioGroup是可以容纳多个RadioButton的容器: 2.每个RadioGroup中的RadioButton同时只能有一个被选中: 3.不同的RadioGroup中的RadioButton互不相干,即如果组A中有一个选中了,组B中依然可以有一个被选中: 4.一个RadioGroup中至少有2个RadioButton: 5.大部分场合下,一个RadioGroup中的RadioButto

android中RadioGroup、RadioButton、Spinner、EditText用法详解(含示例截图和源代码)

为了保护版权.尊重原创,转载请注明出处:http://blog.csdn.net/u013149325/article/details/43237757,谢谢! 今天在项目中用到了android中常用的RadioGroup.RadioButton.Spinner.EditText等控件,在此介绍一下它们的用法,希望对需要的朋友有帮助. 一.RadioGroup和RadioButton的使用 RadioButton就是我们常见的单选按钮,一个RadioGroup可以包含多个单选按钮,但是每次只能选

如何获取listview里面的edittext或者RadioGroup的值,涉及到引发的混乱现象

最近要实现从数据库读数据,该数据对应listview的item布局里面的RadioButton值,并且item布局里面还有EditText的控件. 如何将每一条对应的listview对应值获取出来呢? 实现原理是在作为ArrayAdapter的参数的数据源对象(如数组,集合),举例: ArrayList<MyClass> arrayList = new ArrayList<MyClass>(); ArrayAdapter arrayAdapter = new ArrayAdapte