Android 通过反射给ID赋值

博客介绍了用几行代码搞定复杂页面代码赋值的方法。前提是xml中声明的Id名字需与后台字段一致或加前缀,布局父容器要命名Id。在基类写相关内容,在activity或fragment中调用setData方法即可。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:几行代码搞定复杂页面代码赋值。

 

  1.  前提条件:xml 中生命的Id 名字需要跟后台的字段保持一致,或者加前缀例如:
  •   后台 姓名字段  name 那么你Xml 中的姓名布局Id 也得为name 或加入前缀 ed_name;

    2: 布局中的父容器要跟他命名一个Id,后面代码会用到 例如:

3: 代码: 在你的基类中可以写一下东西:

 /***
     * 反显获取字段
     * @param view
     * @param viewName
     * @param <T>
     * @return
     */
    public <T extends View> T getViewByName(View view, String viewName) {
        Resources res = this.getResources();
        String package_name = this.getPackageName();
        Log.i("Activity_ADD", "package_name:" + package_name);
        int id = res.getIdentifier(viewName, "id", package_name);
        Log.i("Activity_ADD", "id:" + id);
        return view.findViewById(id);
    }



     /***
     * view 为你的父容器的Id, object 为后台的数据源 
     * 反射赋值
     */
    public void setData(View views,Object object) {
        if (object!= null) { //新增
            Field[] fields = object.getClass().getDeclaredFields();
            for (int i = 0; i < fields.length; ++i) {
                Field field = fields[i];
                field.setAccessible(true);
                try {
                    String display = "" + field.get(object);//内容
                    String viewName = "ed_" + field.getName(); //布局字段ID ed为你的前//缀,如果没有写则不写
                    Log.i("Activity_ADD", "viewName:" + viewName + ";display:" + display);
                    View view = getViewByName(views, viewName);
                    Log.i("Activity_ADD", "view:" + view);
                    if (view instanceof TextView) {
                        ((TextView) view).setText(display);
                    }
                } catch (IllegalAccessException var9) {
                    CommLog.d(var9.getMessage());
                }

            }


        }

    }

4: 然后在你需要用的activity 或fragment 中 只需要 调用  setData 方法就可以了 例如:

 

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值