Kotlin通过添加

   apply plugin: 'kotlin-android-extensions'

可以直接使用layout id 名称获取当前view对象,详细使用如下:

//layout
<?xml version="1.0" encoding="utf-8"?> <FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/colorPrimary"
android:id="@+id/root_view"
android:layout_width="match_parent"
android:layout_height="match_parent" > <TextView
android:text="Hello World"
android:id="@+id/hello_world"
android:text="@string/time_span"
style="@style/basicTextStyle" /> </FrameLayout> //kotlin 代码 package cn.enjoytoday.test //这是重点,需要手动添加或者android studio提示添加
import kotlinx.android.synthetic.main.activity_drag_test.* class DragTestActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
setContentView(R.layout.activity_drag_test)
hello_world.text = "完美的写法" } }

就目前为止都是完美的用法,代码简洁的不要不要的。就网上目前情况看,一般的找不到view无法直接通过id代替对象操作使用大多是由于未能成功导入kotlin-android-extensions插件或者直接没有添加,添加方式如下:

apply plugin: 'com.android.application'

//如下两个插件缺一个不可,kotlin-android为基本支持android 开发插件,kotlin-android-extensions就是省去我们频繁找id的插件了
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions' buildscript {
ext.kotlin_version = '1.1.4-3'
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" }
} dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
}

但,这不是终点。真正的槽点在于,即使你以上配置完全正确还是有可能出现找不到的错误,这个错误的产生源于三方的aar导入,存在你使用的layout是导入的三方的aar中的。这里需要注意的是kotlin-android-extensions插件给我们自动寻址的id都是基于我们当前apk资源下的,即是:Resource指向的包。也就是java中比较常见的如下:

 import cn.enjoytoday.test.R.*; //当前应用资源,kotlin-android-extensions寻址对象
import cn.enjoytoday.external.R.*; //引入的三方包的资源

这个时候,我们只能乖乖自己找id了,如下:

package cn.enjoytoday.test

import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.activity_list_item.* //android资源 class DragTestActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
hello_world.text = "完美的写法" val view= View.inflate(this,android.R.layout.activity_list_item,null)
layout.addView(view) view.text1.text ="text" }
} //会报错如下:
DragTestActivity.kt: (7, 39): Unresolved reference: activity_list_item
DragTestActivity.kt: (19, 14): Unresolved reference: text1 //修改后
import kotlinx.android.synthetic.main.activity_main.* class DragTestActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
hello_world.text = "完美的写法" val view= View.inflate(this,android.R.layout.activity_list_item,null)
layout.addView(view) val text1=view.findViewById(android.R.id.text1) as TextView
text1.text ="Test" }
}

图就不贴了,一般来说这种方法会比较少,但不是不可能,尤其三方依赖越来越多。希望以后kotlin-android-extensions可以更加智能吧.

Enjoytoday,EnjoyCoding

kotlinx.android.synthetic.** 坑点的更多相关文章

  1. Android填坑—Error:Execution failed for task ':app:transformClassesWithDexForRelease'

    昨晚正在干着自己的事,另外一个同学说项目打包不了,但是可以debug运行.又急着需要打包apk发给那边人去测试.真的是搞事情,赶紧打开项目试试打包.项目从之前的$Eclipse$中转过来的,清楚的记得 ...

  2. Android爬坑之路

    做了那么久前端,现在终于可以回到我的老本行, 今天我用了一天的时间配置里Android开发环境,mac和windows双平台,eclipse和IDEA双平台,别问为什么,我就喜欢,中间大坑不断,再加上 ...

  3. Android填坑系列:在小米系列等机型上放开定位权限后的定位请求弹框

    背景: 近期因实际项目需要,在特定操作下触发定位请求,取到用户位置及附近位置. 问题: 经初步选型,最终决定接入百度定位,按照百度定位SDK Android文档,接入过程相对顺利.但随后发现,在小米系 ...

  4. Android爬坑之旅:软键盘挡住输入框问题的终极解决方案

    前言 开发做得久了,总免不了会遇到各种坑.而在Android开发的路上,『软键盘挡住了输入框』这个坑,可谓是一个旷日持久的巨坑--来来来,我们慢慢看. 入门篇 Base 最基本的情况,如图所示:在页面 ...

  5. ReactNative for Android入坑(一)

    最近找工作发现有些公司要求会ReactNative,决定入坑. 搭建环境:官网详细的教程附链接. 坑一:FQ,建议整个搭建过程中FQ.(FQ链接,注册有200M试用流量,环境搭建够了)第一步:安装Ch ...

  6. 关于android的坑

    坑1: 使用SQLiteOpenHelper的时候如果建立的表中存在不为空的字段,但是用ContentValues()的方式来插入数据的话恰好没有往这个字段里插入数据,那么执行后市没法往数据库里插入数 ...

  7. Android WebView坑摘要

    要抓好近期iPad HybridApp至Android举,坑遇到太多.让我折腾过Android临近4在退伍军人头痛! 今天前者被列出,以满足,然后慢慢自己解决.现在,它已经解决android键盘覆盖问 ...

  8. android 趟坑记

    又是一个伤感的故事,但阿古好像已经习以为常了. 大半年的辛苦又泡汤了,故事是这样. 帝都某高端小区,封闭局域网,做一个可视对讲+门禁的APP,之前那一版因为使用了商业代码,又不想花钱,于是找阿古换一个 ...

  9. Android填坑系列:Android JSONObject 中对key-value为null的特殊处理

    在与服务端通过JSON格式进行交互过程中,不同版本的JSON库在对于key-value为null情况上的处理不同. Android自带的org.json对key-value都要求不能为null,对于必 ...

随机推荐

  1. java工作流系统-流程引擎执行自定义URL

    关键词:工作流快速开发平台  工作流流设计  业务流程管理   asp.net 开源工作流    bpm工作流系统  java工作流主流框架  自定义工作流引擎 概要介绍: 用户在表达自己的业务逻辑时 ...

  2. Csharp:HttpWebRequest or HttpClient

    /// <summary> /// Define other methods and classes here /// </summary> /// <param nam ...

  3. NLP之语言模型

    参考: https://mp.weixin.qq.com/s/NvwB9H71JUivFyL_Or_ENA http://yangminz.coding.me/blog/post/MinkolovRN ...

  4. 微软发布ML.NET 1.0

    原文地址:https://devblogs.microsoft.com/dotnet/announcing-ml-net-1-0/ 我们很高兴地宣布今天发布ML.NET 1.0.  ML.NET是一个 ...

  5. Power BI 概念及 国内版Pro 试用账户注册流程

    视频内容: Power BI 基本概念:https://v.qq.com/x/page/s3026nn69eu.html Power BI Pro 世纪互联版本试用账号注册:https://v.qq. ...

  6. MongoDB(二):在Windows环境安装MongoDB

    1. 在Windows环境安装 1.1 MongoDB下载 要在Windows上安装MongoDB,首先打开MongoDB官网:https://www.mongodb.com/download-cen ...

  7. 安装指定版本的tensorflow(我报错了)

    安装命令如下: pip install tensorflow-gpu==1.10.0 -i https://pypi.tuna.tsinghua.edu.cn/simple 慎用,反正我报错了,而且还 ...

  8. activiti web流程设计器 工作流的 整合视频教程 SSM和独立部署

    本视频为activiti工作流的web流程设计器整合视频教程 整合Acitiviti在线流程设计器(Activiti-Modeler 5.21.0 官方流程设计器) 本视频共讲了两种整合方式 1. 流 ...

  9. SpringBoot 日志系统

    日志框架 开发一个大型系统的简易步骤: system.out.println("..") 将关键的数据在控制台输出 框架记录系统的一些运行时的信息,---日志框架. 牛逼的功能-- ...

  10. python(二) jupyter 快捷键

    jupyter notebook 中的快捷键介绍 当你熟练使用notebooks的基本功能后,掌握他的快捷键是十分必要的,这样可以大大提高你的工作效率.下面是一些比较常用的快捷键: 编辑模式:点击单元 ...