ExampleViewContentProvider 充当模型侦听器,后者扩展自 IStructuredContentProvider。它是 Eclipse API 的简单实现,提供了用于检索数据的回调。每个请求数据的条目都基于视图创建时在布局中为条目定义的惟一 ID。
方法调用会返回与每个定义的全局 ID 关联的数据。在 清单 7 所示的内容提供者中,可以使用适配器从 XML 文件或数据库检索数据。
清单 7. 在定制的 ContentProvider 中实现方法
1 public Object getElement(int iIndex) {
2 switch (iIndex) {
3 case FIRST_INDEX: return "developer@ibm.com";
4 case SECOND_INDEX : return new Integer(1);
5 case FOURTH_INDEX : return new Boolean(true);
6 case THIRD_INDEX: return new Boolean(false);
7 case FIFTH_INDEX: return new Boolean(false);
8 }
9 return null;
10 }
11
2 switch (iIndex) {
3 case FIRST_INDEX: return "developer@ibm.com";
4 case SECOND_INDEX : return new Integer(1);
5 case FOURTH_INDEX : return new Boolean(true);
6 case THIRD_INDEX: return new Boolean(false);
7 case FIFTH_INDEX: return new Boolean(false);
8 }
9 return null;
10 }
11
创建了控件并初始化布局之后,表单会用控件 ID 要求内容提供者用数据填充表单控件。
清单 8. 初始化布局并填充控件的表单
1 public Form (Composite parent, int style, FieldMode mode, ExampleViewContentProvider content) {
2 super(parent, style);
3 _content = content;
4 _style = style;
5 setMode(mode);
6 init(style);
7 }
8
9 private void init(int style) {
10 createControls(style);
11 controlsCreated();
12 }
13 protected void controlsCreated() {
14 readFromContent();
15 }
16
2 super(parent, style);
3 _content = content;
4 _style = style;
5 setMode(mode);
6 init(style);
7 }
8
9 private void init(int style) {
10 createControls(style);
11 controlsCreated();
12 }
13 protected void controlsCreated() {
14 readFromContent();
15 }
16
结束语
Web 应用程序是 MVC 架构样式的早期实现者。但是,随着像 Eclipse 这样的简单而强大的开发平台的到来,程序员可以轻易地用更短的时间和最小的复杂程度,开发出更丰富的用户界面。