首页 > 编程知识 正文

android常用控件,android:appComponentFactory

时间:2023-05-05 02:48:51 阅读:51698 作者:2045

接口控件初始化通常是在findViewByid中查找绑定,然后强制转换。 这项工作只是单纯的劳力,没有营养。 目前,许多开源类包都支持以评论的形式绑定控件

publicclasstestactivityextendsbaseactivity {

@ view inject (r.id.claim _ statement ) )。

私密webview mweb view;

}

但是,这种形式实际上编写了与findViewByid差别不大的代码。

习惯类的控件属性名称与xml的id名称相匹配,可以方便地在类和xml中进行对应搜索,初始化时复制&; 糊得也快

~

因此,既然控件名称与id匹配,那么可以直接从反射类的属性初始化控件,并不意味着初始化控件的过程可以大大省去

接下来直接坐代码

package com.gy.util;

导入安卓. view.view;

import java.lang.reflect.Field;

//*

*属性名称反射绑定控件

*创建by gy on 2016/3/16。

*/

公共类视图绑定器{

publicstaticfinalvoidbindviews (对象,视图福ot视图) {

if(object==null ) {

返回;

}

//获取对象中的所有属性-不包括父类的私有成员

field[]fields=getfields(object );

for(fieldfi:fields ) {

//确定属性是否从view继承

if (view.class.isassignablefrom (fi.gettype () ) )

//从属性名称中获取id

intid=foot view.get resources (.get identifier ) fi.getname )、' id '、footView.getContext ).getPackageName )。

if(id0 ) {

try {

找到//id时将控件绑定到相应的属性

fi.set (对象,footview.findviewbyid(id ) );

(匹配(illegalaccessexceptione ) ) ) )。

e .打印堆栈跟踪(;

}

}

}

}

}

公共静态字段[ ] get fields {

Field[] f1=o.getClass ().getDeclaredFields );

//设定为不检查访问

for(intI=0; i f1.length; I ) {

F1[I].setaccessible(true );

}

返回f1;

}

}

封装为活动

publicabstractclassbaseactivityextendsfragmentactivity {

@Override

publicvoidsetcontentview (intlayoutresid ) {

super.setcontentview (layout resid );

viewbindutil.bindviews(this,getWindow ) ).getDecorView );

}

@Override

公共语音内容视图(视图视图) {

super.setcontentview(view;

viewbindutil.bindviews(this,getWindow ) ).getDecorView );

}

}

如果继承了此activity,则可以省略绑定过程并直接使用

publicclassmainactivityextendsbaseactivity {

私密textview TV _ name;

@Override

protectedvoidoncreate (边界维护实例state )。

super.oncreate (savedinstancestate;

setcontentview (r.layout.activity _ main;

TV_name.settext('123 );

}

}

此方法适用于任何对象activity、fragment或listview自定义视图文件夹。 只要确保控件的属性名称和id匹配即可,如果id不匹配,也可以手动绑定

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。