为什么你可以通过注解来绑定UI(一)?

本文介绍了一种自定义注解实现UI元素绑定的方法。通过创建ViewInject注解类及BaseActivity基类,实现了在Activity中自动绑定视图组件ID的功能。

--本文节选与《伊索愚言》第一章第一节,如有雷同,纯属巧合。

很久很久以前,

部落首领鲍勃每天起床第一件事就是跑到喜欢的媛媛家门口说一句:findViewById。。。

猿猿:呕!!呕!!(已记不清是第几次了。)

日复一日,年复一年。。。

终于有一天,AFinal大侠来到了部落,

从此,首领再也没见过猿猿了。。。

究竟是什么原因,猿猿不辞而别,从此杳无音信?

为了搞清楚事情的来龙去脉,首领每天头悬梁锥刺股努力研究AFinal到底有什么魔力能够吸引媛媛,从而有一天能够夺回心爱的猿猿。

一回首十年已经过去了。。

终于,首领习得终极大招“注解绑定UI”,

“哈哈,原来如此简单!”说罢,便将秘籍写下:

第一式:自定义一个注解类:ViewInject

/**

 * 自定义注解,绑定UI的Id

 * 1.@Target表示需要注解的类型:

 * a.ElementType.TYPE:

 * 类、接口、枚举类型

 * b.ElementType.FIELD:

 * 属性

 * c.ElementType.METHOD:

 * 方法

 * d.ElementType.PARAMETER:

 * 参数

 * e.ElementType.CONSTRUCTOR:

 * 构造函数

 * f.ElementType.LOCAL_VARIABLE:

 * 局部变量

 * g.ElementType.ANNOTATION_TYPE:

 * 注解类型

 * h.ElementType.PACKAGE:

 * 包

 * 

 * 2.@Retention表示注解保留的范围:

 * a.RetentionPolicy.SOURCE:

 * 注解只在源码中有效

 * b.RetentionPolicy.CLASS:

 * 注解在源码和class中有效,此为默认策略

 * c.RetentionPolicy.RUNTIME:

 * 注解在源码、class文件和运行时都有效

 * 

 * @author Yanbao_Wu

 */

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

public @interface ViewInject {

int value();

}

第二式:新建我们自己的activity基类:BaseActivity

/**

 * Activity 基类,支持通过注解的方式绑定UI

 * 

 * @author Yanbao_Wu

 * @date: 2014-11-21

 */

public abstract class BaseActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(initLayoutId());

injectViews();

}

/**

* 通过反射的方式将id绑定到加上注解的View

* @author Yanbao_Wu

*/

protected void injectViews(){

Field[] fields = this.getClass().getDeclaredFields();

for (Field field : fields) {

                    if (field.isAnnotationPresent(ViewInject.class)) {

ViewInject inject = field.getAnnotation(ViewInject.class);

int id = inject.value();

if (id > 0) {

field.setAccessible(true);

try {

field.set(this, this.findViewById(id));

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

}

}

}

}

public abstract int initLayoutId();

}

猿猿终于又回来了,并且与首领幸福的在一起:

public class MainActivity extends BaseActivity {

@ViewInject(R.id.test_anotation)

private TextView anotationText;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        

        // 注解的方式成功绑定id,text将被设置,否则会抛出空指针异常

        anotationText.setText("Test Anotation");

    }

 

@Override

public int initLayoutId() {

return R.layout.activity_main;

}

}

本节完!

内容概要:本文档介绍了基于3D FDTD(时域有限差分)方法在MATLAB平台上对微带线馈电的矩形天线进行仿真分析的技术方案,重点在于模拟超MATLAB基于3D FDTD的微带线馈矩形天线分析[用于模拟超宽带脉冲通过线馈矩形天线的传播,以计算微带结构的回波损耗参数]宽带脉冲信号通过天线结构的传播过程,并计算微带结构的回波损耗参数(S11),以评估天线的匹配性能和辐射特性。该方法通过建立三维电磁场模型,精确求解麦克斯韦方程组,适用于高频电磁仿真,能够有效分析天线在宽频带内的响应特性。文档还提及该资源属于个涵盖多个科研方向的综合性MATLAB仿真资源包,涉及通信、信号处理、电力系统、机器学习等多个领域。; 适合人群:具备电磁场与微波技术基础知识,熟悉MATLAB编程及数值仿真的高校研究生、科研人员及通信工程领域技术人员。; 使用场景及目标:① 掌握3D FDTD方法在天线仿真中的具体实现流程;② 分析微带天线的回波损耗特性,优化天线设计参数以提升宽带匹配性能;③ 学习复杂电磁问题的数值建模与仿真技巧,拓展在射频与无线通信领域的研究能力。; 阅读建议:建议读者结合电磁理论基础,仔细理解FDTD算法的离散化过程和边界条件设置,运行并调试提供的MATLAB代码,通过调整天线几何尺寸和材料参数观察回波损耗曲线的变化,从而深入掌握仿真原理与工程应用方法。
<think>好的,用户的问题是关于如何在Fiori Elements报表中通过CDS视图的UI注解绑定SE11搜索帮助。我需要仔细分析这个问题,并确保回答准确且有步骤。 首先,我需要回忆Fiori Elements的基本知识,特别是CDS视图中的注解使用。根据引用[3]和[4],Fiori Elements使用注解来定义UI行为,而不需要大量前端代码。用户提到的SE11搜索帮助是SAP的传统搜索帮助,需要将其绑定到CDS字段上,然后在Fiori应用中自动生效。 接下来,我需要确认如何在CDS视图中添加注解来引用SE11搜索帮助。根据经验,可能需要使用@Consumption.valueHelpDefinition注解,并指定类型为SH(Search Help),然后提供搜索帮助的名称。例如,@Consumption.valueHelpDefinition: [{ entity: { name: 'Z_SE11_SEARCH_HELP', element: 'FieldName' } }]。需要验证这个语法是否正确,可能需要查阅相关资料或官方文档。 然后,需要考虑注解的正确位置和作用域。是否需要在字段级别添加这个注解?是的,每个需要搜索帮助的字段都应该有自己的注解。此外,还要注意是否需要其他注解来配合,比如UI.lineItem或UI.selectionField,以确保字段在报表中正确显示为筛选条件。 另外,用户可能需要个具体的示例来理解如何操作。因此,提供个CDS视图的代码示例会很有帮助。例如,在定义字段时,添加对应的注解,并说明每个部分的作用。同时,需要注意语法是否正确,比如大括号的使用和参数的正确性。 还需要考虑可能的常见问题,比如搜索帮助未生效的原因。可能的原因包括注解错误、搜索帮助名称拼写错误,或者Fiori Elements模板不支持该类型的搜索帮助。这时候需要建议用户检查注解语法,并确保使用支持的前端模板,如List Report或Object Page。 最后,根据引用[2]中的案例,用户可能在需要动态过滤的情况下遇到标准模板的限制,但这里的问题是关于搜索帮助的绑定,属于基本功能,标准模板应该支持。不过,如果遇到复杂情况,可能需要自定义扩展,但当前问题应集中在标准方法上。 总结回答的结构:首先介绍基本原理,然后分步骤说明如何添加注解,提供示例代码,最后给出注意事项和常见问题解决方法。确保引用相关的资料,如引用[3]和[4],以增强可信度。</think>在Fiori Elements报表中,通过CDS视图的UI注解绑定SE11搜索帮助需要遵循以下步骤: ### 、原理说明 Fiori Elements通过CDS注解的`@Consumption.valueHelpDefinition`属性实现SE11搜索帮助绑定。该注解将ABAP数据字典中的搜索帮助与CDS字段关联,自动生成带搜索帮助的输入字段[^3][^4]。 ### 二、实现步骤 #### 1. CDS视图字段注解 ```abap @UI: { lineItem: [ { position: 10 } ], selectionField: { position: 10 } } @Consumption.valueHelpDefinition: [{ entity: { name: 'Z_SE11_SEARCH_HELP', // 替换为实际搜索帮助名称 element: 'Bukrs' // 搜索帮助对应的字段 } }] Bukrs : bukrs; // 公司代码字段示例 ``` * `@Consumption.valueHelpDefinition`指定搜索帮助实体 * `entity.name`对应SE11搜索帮助名称 * `entity.element`绑定目标字段 #### 2. 前端模板适配 使用`@UI.selectionField`确保字段显示在筛选栏,支持以下模板: - List Report - Analytical List Page - Object Page的筛选区域 ### 三、验证方法 1. 激活CDS视图后发布服务 2. 在Fiori Elements应用中,点击绑定字段的输入框 3. 应出现搜索帮助图标(放大镜) 4. 点击图标弹出SE11标准搜索帮助窗口 ### 四、常见问题排查 | 现象 | 解决方案 | |-------|---------| | 搜索帮助未显示 | 检查注解语法是否正确嵌套在字段定义中 | | 弹出空窗口 | 确认SE11搜索帮助已激活且包含有效数据 | | 多字段关联失效 | 使用`dependentOn`属性设置字段依赖关系 | **注**:对于复杂搜索场景(如跨表联查),建议创建自定义CDS Value Help视图替代标准搜索帮助[^2][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值