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. Unity-使用UnityRemote调试手机Android Studio打印日志

    抛出问题:  1.Unity调试Android的时候默认情况是build打包成apk,安装到手机运行,调试起来很不方便,如何快速在手机上运行呢?  2.如何像unity的console一样在andro ...

  2. 创建mysql索引的方式

    创建索引方式: 1.create index 索引名   on 表名 (字段) 2.alter table 表  add index 索引名  (字段) -- 普通索引 alter table 表名 ...

  3. ESP32的NVS使用指南

    NVS总的来说,就是非易失性存储,类似MCU EEPROM,但实际上调用ESP32这些函数,数据是存储在FLASH中的. 它的管理方式类似数据库的表,在NVS里面可以存储很多个不同的表,每个表下面有不 ...

  4. Jmeter常用的两大性能测试场景

    一.阶梯式场景 该场景主要应用在负载测试里面,通过设定一定的并发线程数,给定加压规则,遵循“缓起步,快结束”的原则,不断地增加并发用户来找到系统的性能瓶颈,进而有针对性的进行各方面的系统优化. 使用到 ...

  5. 再窥R(包括一个R示例)

    一.将输出作为输入——结果的重用 R有个特点,分析的结果可以保存下来,并可以作为进一步分析的输入使用.下面我们通过R中的预先安装好的数据集作为实例(这里只讲述原理,涉及到的统计知识,以后在另外的统计专 ...

  6. 剑指offer笔记面试题8----二叉树的下一个节点

    题目:给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左.右子节点的指针,还有一个指向父节点的指针. 测试用例: 普通二叉树(完全二叉树,不完全二叉树). ...

  7. js-08-数组学习

    一.数组语法格式 var name=[item1,item2,......] 二.数组的声明创建 var arr=new Aarray( ) //声明一个空数组对象 var arr=new Array ...

  8. Html5 小游戏 俄罗斯方块

    导言 在一个风和日丽的一天,看完了疯狂HTML 5+CSS 3+JavaScript讲义,跟着做了书里最后一章的俄罗斯方块小游戏,并做了一些改进,作为自己前端学习的第一站. 游戏效果: 制作思路 因为 ...

  9. 我应该怎么学习SAP?

    越来越多的人关注本公众号,在后台留言问我怎么进入SAP行业,应该怎么学习SAP,大部分都是外行想入行SAP的朋友.作为过来人,这些问题我也曾经问过别人,也走过不少弯路.但现在轮到别人问我了,为了让初学 ...

  10. iOS开发WKWebView 返回H5上级页面

    #pragma mark ---- 点击事件 -(void)leftTapClick:(UITapGestureRecognizer *)sender{ //判断是否能返回到H5上级页面 if (se ...