我们可以在Android中创建自定义的Synthetic Kotlin扩展吗?

斯里·哈莎·奇拉卡帕蒂(Sri Harsha Chilakapati)

我对Android的Kotlin综合扩展感兴趣,并认为我们是否可以对自定义文件(例如我们保留在项目中的原始XML文件)执行相同的操作。例如,让我们考虑一下Kotlin中的综合视图。

import kotlinx.android.synthetic.main.fragment_profile_management.*

textview_shop_name.text = merchant.establishmentName

生成的代码是这样的:

TextView textView = (TextView) _$_findCachedViewById(com.goharsha.testapp.R.id.textview_shop_name);
Intrinsics.checkExpressionValueIsNotNull(textView, "textview_shop_name");
Merchant merchant3 = this.merchant;

if (merchant3 == null) {
    Intrinsics.throwUninitializedPropertyAccessException("merchant");
}

textView.setText(merchant3.getEstablishmentName());

并且该_$_findCachedViewById方法也被生成到相同的类中,如下所示:

private HashMap _$_findViewCache;

public View _$_findCachedViewById(int i) {
    if (this._$_findViewCache == null) {
        this._$_findViewCache = new HashMap();
    }

    View view = (View) this._$_findViewCache.get(Integer.valueOf(i));

    if (view != null) {
        return view;
    }

    View view2 = getView();

    if (view2 == null) {
        return null;
    }

    View findViewById = view2.findViewById(i);
    this._$_findViewCache.put(Integer.valueOf(i), findViewById);

    return findViewById;
}

由于这是特定于Android的,因此我猜想这可以在Kotlin中完成,也许我可以将其扩展为自定义的原始XML文件,例如配置文件,并将其解析为一个对象可能很有趣。

但是,我找不到该怎么办。我知道Kotlin中的扩展功能,但是在这里,将基于导入来合成整个文件。当我反编译该应用程序时,还存在找不到此Kotlin导入的魔力。

我还尝试查看core-ktx和view-ktx库,但到目前为止还没有运气。任何想法如何做到这一点?

斯里·哈莎·奇拉卡帕蒂(Sri Harsha Chilakapati)

是的,可以这样做,您需要做三件事才能完成此任务。

  1. 编写Gradle插件
  2. 编写Kotlin编译器插件(该API未记录,因此请为真正的挑战做好准备)
  3. 编写一个IntelliJ插件(用于诸如在合成字段上定位到导航到XML文件的功能)

这些综合视图的生成就是按照这种方式完成的。如果您想尝试做类似的事情,这里有一些资源。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我们可以在iPhone中创建自定义振动并搜索来电位置吗

来自分类Dev

我们可以在install4j中创建和使用自定义日志文件吗?

来自分类Dev

我们可以在自定义函数中包含条件作为参数吗?

来自分类Dev

我们可以在iOS SDK中自定义ABNewPersonController吗?

来自分类Dev

我们可以在UWP中自定义CommandBar吗

来自分类Dev

我们可以为Android Wear项目做一个自定义布局以进行通知吗

来自分类Dev

我们可以将自定义数组定义为 Mongoose 模式类型吗?

来自分类Dev

Fullcalendar-我们可以向事件Json Data中添加自定义数据吗?

来自分类Dev

我们可以使用angular js中的自定义过滤器过滤嵌套的json数据吗

来自分类Dev

我们可以给AVSpeechSynthesizer发出自定义声音吗

来自分类Dev

我们可以将点击处理程序附加到自定义子组件吗

来自分类Dev

我们可以自定义中心样式或全景应用的默认样式吗

来自分类Dev

我们可以编写自定义检查以使用Data Dog监视过程吗

来自分类Dev

我们可以自定义Facebook SDK框架吗?

来自分类Dev

我们可以给AVSpeechSynthesizer发出自定义声音吗

来自分类Dev

我们可以自定义canvasjs甜甜圈图到其他吗?

来自分类Dev

我们可以将UITableView添加到自定义UITableViewcell吗?

来自分类Dev

我们需要注册自定义标签吗?

来自分类Dev

我们刚刚升级到 VB2017 社区:我可以创建自定义工具箱吗?

来自分类Dev

我可以在 CitrusFramework 中创建自定义报告吗

来自分类Dev

我们可以继承另一个类中的一个类中定义的自定义变量吗?

来自分类Dev

我们可以使用动态扩展磁盘在Azure中创建VM吗?

来自分类Dev

我可以在android中自定义视图吗?

来自分类Dev

我们可以使用“消息”作为(自定义)事件在Google跟踪代码管理器中触发代码吗?

来自分类Dev

我们可以一起使用prepareRenderer组件和自定义单元格Renderer吗?

来自分类Dev

我们可以在PhoneGap / Cordova中将自定义对象从本机传递到JS吗?

来自分类Dev

我们可以在Google Maps V3上拖动自定义叠加层吗

来自分类Dev

我们可以为生产者配置“ delivery.timeout.ms”设置自定义值吗?

来自分类Dev

我们可以在Google Maps V3上拖动自定义叠加层吗

Related 相关文章

  1. 1

    我们可以在iPhone中创建自定义振动并搜索来电位置吗

  2. 2

    我们可以在install4j中创建和使用自定义日志文件吗?

  3. 3

    我们可以在自定义函数中包含条件作为参数吗?

  4. 4

    我们可以在iOS SDK中自定义ABNewPersonController吗?

  5. 5

    我们可以在UWP中自定义CommandBar吗

  6. 6

    我们可以为Android Wear项目做一个自定义布局以进行通知吗

  7. 7

    我们可以将自定义数组定义为 Mongoose 模式类型吗?

  8. 8

    Fullcalendar-我们可以向事件Json Data中添加自定义数据吗?

  9. 9

    我们可以使用angular js中的自定义过滤器过滤嵌套的json数据吗

  10. 10

    我们可以给AVSpeechSynthesizer发出自定义声音吗

  11. 11

    我们可以将点击处理程序附加到自定义子组件吗

  12. 12

    我们可以自定义中心样式或全景应用的默认样式吗

  13. 13

    我们可以编写自定义检查以使用Data Dog监视过程吗

  14. 14

    我们可以自定义Facebook SDK框架吗?

  15. 15

    我们可以给AVSpeechSynthesizer发出自定义声音吗

  16. 16

    我们可以自定义canvasjs甜甜圈图到其他吗?

  17. 17

    我们可以将UITableView添加到自定义UITableViewcell吗?

  18. 18

    我们需要注册自定义标签吗?

  19. 19

    我们刚刚升级到 VB2017 社区:我可以创建自定义工具箱吗?

  20. 20

    我可以在 CitrusFramework 中创建自定义报告吗

  21. 21

    我们可以继承另一个类中的一个类中定义的自定义变量吗?

  22. 22

    我们可以使用动态扩展磁盘在Azure中创建VM吗?

  23. 23

    我可以在android中自定义视图吗?

  24. 24

    我们可以使用“消息”作为(自定义)事件在Google跟踪代码管理器中触发代码吗?

  25. 25

    我们可以一起使用prepareRenderer组件和自定义单元格Renderer吗?

  26. 26

    我们可以在PhoneGap / Cordova中将自定义对象从本机传递到JS吗?

  27. 27

    我们可以在Google Maps V3上拖动自定义叠加层吗

  28. 28

    我们可以为生产者配置“ delivery.timeout.ms”设置自定义值吗?

  29. 29

    我们可以在Google Maps V3上拖动自定义叠加层吗

热门标签

归档