¡Déjala aquí, que se muera sola!” – gritaron al abandonar a la abuela en la nieve. Los desalmados no sabían que el bumerán pronto regresaría.

“¡Déjenla aquí, que se muera sola!” dijeron ellos, abandonando a la abuela en la nieve. Los canallas no sabían que el boomerang pronto volvería.

Valentina López caminaba hacia su portal. Las señoras del banco charlaban sobre el flamante coche aparcado cerca.

¿De quién es? preguntó Valentina.
¡Ni idea! contestó una. Seguro que es de María. Aquí los abuelos no llegan con coches tan caros.
¡Aquí solo vienen las ambulancias! añadió otra.

Las vecinas siguieron cotorreando sobre políticos y chismes. De pronto, apareció la tal María, dueña del coche. Salió sin mirar a nadie ni al vehículo sobre el césped. Valentina entró rápido en casa.

¿Valentina López? dijo un hombre en el rellano. ¿Se acuerda de mí? Hablamos hace unos días. Soy su sobrino.
¡Ah, Javier! exclamó ella. ¿Por qué no avisaste de tu visita? ¿Ese coche es tuyo?
Sí, mío.
¡Pues ve a moverlo antes de que la gente proteste! ¿Cómo se te ocurre aparcar en mis flores?

El sobrino salió pitando. Valentina fue a preparar té. Necesitaba vender el piso; no quería dejar el césped destrozado a las vecinas.

Hacía años, su tío visitaba con su hijo. Luego, la familia perdió contacto. Y ahora, ¡el chico aparecía! Algo en él despertaba sospechas en Valentina: fumaba demasiado. Joven, pero con los dientes amarillos. Menos mal que vino. Ella no quería contratar a un agente inmobiliario; prefería darle algo al sobrino. Pero él rechazó el dinero.

Viuda y sin hijos, Valentina ansiaba mudarse al campo. Mejor aire puro que bajar cuatro pisos cada día. En el pueblo había huerto. Mientras tuviera fuerzas, quería plantar verduras. En otoño apareció un comprador.

Mañana empieza el invierno. Mejor vendemos en primavera decidió Valentina, posponiendo la venta.
¡Pero en primavera subirán los precios! replicó Javier. Con frío se revisa mejor la calefacción. Además, ya hay comprador. ¿Y si luego se e# Kotlin Android Extensions

## 1. 概述

相信每一位安卓开发人员对findViewById() 这个方法再熟悉不过了,毫无疑问,潜在的 bug 和脏乱的代码令后续开发无从下手的尽管存在一系列的开源库能够为这个问题带来解决方案,然而对于运行时依赖的库,需要为每一个 View 注解变量字段

现在 Kotlin 安卓扩展插件能够提供与这些开源库功能相同的体验,不需要添加任何额外代码,也不影响任何运行时体验

因此,我们可以写出如下代码:

“`kotlin
// 使用来自主代码集的 R.layout.activity_main
import kotlinx.android.synthetic.main.activity_main.*

class MyActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

// 代替 findView(R.id.textView)
textView.setText(“Hello, world!”)
// 而不是 findViewById(R.id.textView) as TextView
textView.text = “Hello, world!”
}
}
“`

textView 是对 Activity 的一项扩展属性,与在 activity_main.xml 中的声明具有同样类型 (它是一个 TextView)

## 2. 使用 Kotlin 安卓扩展

### 2.1 依赖配置

在该教程中我们会提供为 Gradle 构建安卓工程的配置方法

#### 2.1.1 用于安卓应用的配置

安卓扩展是 Kotlin IDEA 插件的组成之一,因此不需要再单独安装新插件

开发者仅需要模块的 `build.gradle` 文件中启用安卓扩展 Gradle 插件即可:

“`groovy
apply plugin: ‘kotlin-android-extensions’
“`

#### 2.1.2 用于安卓 library 的配置

安卓 library 内部模块的使用略有不同 (参考[多模块项目](#3-多模块项目)),因此该 library 产生的插件 artifact 不是基于 `R` 类的,而是基于随该安卓 library 编译产生的包名

因此开发者需要在主模块的 `build.gradle` 文件中添加以下代码来读取该包名:

“`groovy
androidExtensions {
experimental = true
}
“`

一旦开启该选项,该安卓扩展就会尝试读取该包名每个未开启该选项的模块都会在 logcat 中看到以下错误信息:

“`
Could not read package name from android manifest
“`

### 2.2 导入 synthetic 属性

仅需要一行即可非常方便导入指定布局文件中所有控件属性:

“`kotlin
import kotlinx.android.synthetic.main.<布局>.*
“`

假设当前布局文件是 `activity_main.xml`,我们只需要引入 `kotlinx.android.synthetic.main.activity_main.*`

若需要调用 View 的合成属性(在适配器内等),同时还应该导入 `kotlinx.android.synthetic.main.activity_main.view.*`

一旦我们声明了以上导入,我们即可在代码中调用对应 View 组件,这些组件都是布局中的 View 的引用比如下例这个布局文件:

“`xml

“`

将有一个名为 `hello` 的属性:

“`kotlin
activity.hello.text = “Hello World!”
“`

### 2.3 混淆

安卓扩展不需要依赖额外的依赖库由插件在模块中生成代码,仅对每个 kotlin 类进行一次视图缓存

因此在混淆项目中需要开启以下混淆规则:

“`
-keep class kotlinx.android.synthetic.** { *; }
“`

> **注意**: 如果代码中引用到的 View 在 XML 布局中没有声明,混淆后运行会发生 crash

## 3. 多模块项目

当我们在多模块项目中使用 Kotlin 安卓扩展时,有几个小问题需要注意

### 3.1 应用模块中的常规布局

假设有一个应用模块使用了一个 library 模块,比如:

`build.gradle` 在应用模块中配置如下:

“`groovy
apply plugin: ‘com.android.application’
apply plugin: ‘kotlin-android’
apply plugin: ‘kotlin-android-extensions’
“`

然后我们在应用模块的布局中添加一个 `android:id=”@+id/hello”` 的 TextView

这时候就可以在应用模块中调用该 TextView 了:

“`kotlin
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

hello.text = “Hello World!”
}
}
“`

### 3.2 library 模块中的常规布局

假设我们在 library 模块中也添加了一个同样的布局,这时候如果我们尝试在 library 模块中调用该 TextView,IDE 就会提示该属性未定义

这时候我们需要打开模块的 `build.gradle` 配置文件,并添加 `androidExtensions.experimental = true` 的配置:

“`groovy
apply plugin: ‘com.android.library’
apply plugin: ‘kotlin-android’
apply plugin: ‘kotlin-android-extensions’

androidExtensions {
experimental = true
}
“`

然后在代码中我们就可以正常使用该属性了:

“`kotlin
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

hello.text = “Hello World!”
}
}
“`

### 3.3 应用模块中调用 library 模块中的布局

假设我们在 library 模块中声明了一个布局文件,并且希望在应用模块中调用该布局文件中的 View,这时候我们需要在应用模块中这样导入布局:

“`kotlin
import kotlinx.android.synthetic.main.activity_main.view.*
“`

然后我们就可以在代码中这样使用该布局文件中的 View 了:

“`kotlin
val view = LayoutInflater.from(this).inflate(R.layout.activity_main, null)
view.hello.text = “Hello World!”
“`

## 4. 注意事项

### 4.1 关于 `LayoutContainer` 的支持

在安卓扩展中,通常情况下的 `Activity“Fragment` 和 `View` 都默认实现了 `LayoutContainer` 接口但是在某些版本中,`View` 并不支持该接口,这时候我们只能通过导入 `kotlinx.android.synthetic.main.activity_main.view.*` 来使用相关属性

### 4.2 关于 `View` 的缓存

安卓扩展会对每个 `Activity“Fragment` 和 `View` 的 `findViewById` 的结果进行缓存,以避免重复调用 `findViewById`

但是这些缓存并不会在 `Activity“Fragment` 和 `View` 的生命周期结束后自动清除,因此如果我们在 `Activity“Fragment` 和 `View` 的生命

Rate article
Add a comment

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

3 × 3 =

¡Déjala aquí, que se muera sola!” – gritaron al abandonar a la abuela en la nieve. Los desalmados no sabían que el bumerán pronto regresaría.
— ¿Qué estás haciendo…? —la voz de la exsuegra resonaba indignada—. ¿Es que no entiendes lo que haces? ¡Hace un frío terrible en la calle! ¡Y mi nieto va vestido tan ligero! ¡Se va a quedar helado! ¿Quieres que el niño enferme? — ¡No lo sostienes bien! El grito sonó de repente, cortante y agudo. Pero Marina ni se inmutó. Ya llevaba meses acostumbrada a oír esa voz. La exsuegra. Otra vez. Siempre en el momento más inoportuno. Marina se giró despacio, apretando a su hijo contra sí. Iván, de ocho meses, respiraba tranquilo sobre su hombro, envuelto en su mono calentito. El parque estaba casi vacío aquel día laboral. Sólo algún que otro paseante cruzaba deprisa, arropándose en sus chaquetas. — Buenos días, señora Lucía, —respondió Marina, indiferente. La exsuegra desechó el saludo como quien espanta a una mosca pesada. Su cara, roja por el enfado y el frío, se acercó aún más, apretando los labios y clavando los ojos en el nieto. — ¿Qué estás haciendo…? —la voz de Lucía vibraba de indignación—. ¿De verdad sabes lo que haces? ¡Hace un frío polar y mi nieto va casi en manga corta! ¡Se va a resfriar! ¿Quieres que el niño enferme? Marina miró a Iván. Mono, gorro, bufanda, todo según el tiempo… — Señora Lucía, estamos a ocho grados. Va vestido acorde. — ¿Acorde? —la exsuegra dio otro paso—. ¿Y sabes cómo hay que llevar a un niño? ¡Así no se puede! ¡Le vas a estropear la postura! Se va a quedar encorvado. Y está tan flaco… ¿Lo tienes a dieta? Marina apretó la mandíbula. Iván estaba perfectamente sano. La pediatra alababa su desarrollo en cada consulta. Pero Lucía no cejaba. — ¡Y esos paseos tuyos! —insistía la exsuegra—. ¡Dos horas paseando al niño por la calle! ¿No ves que es un castigo? Lo que necesita es calor, tranquilidad, y tú lo tienes al viento. ¡Madre dice…! Marina cambió a Iván de brazo. El pequeño giró, abrió los ojos y volvió a dormirse. — Señora Lucía, mejor lo dejamos… — ¿Lo dejamos? —interrumpió la otra—. ¡Pues no lo dejamos! ¡Tú no sabes criar niños! ¡No tienes ni idea! Yo he criado tres y tú, que es la primera vez, ¡venga a creerte que lo haces mejor que nadie! ¡Qué lista! A Marina le dolía el cuerpo. Aquel torrente de acusaciones le era tan familiar… Cada visita de la exsuegra acababa en interrogatorio, cada encuentro, el mismísimo infierno. — Y encima —Lucía se acercó aún más, ojos brillando—, ¡todo es culpa tuya! ¡Tú destrozaste la familia! ¡Mi hijo era feliz hasta que montaste el circo! ¡Lo echaste! ¡Privaste al niño de su padre! ¡Todo culpa tuya! Marina se quedó inmóvil. El aire parecía congelarse. Las palabras de la exsuegra retumbaban dentro. ¿Su culpa? ¿Ella había roto la familia? — Es hora de irnos, —susurró Marina, dándose la vuelta. — ¿Me huyes? —gritó Lucía tras ella— ¿La verdad duele? ¡Destrozaste la vida de mi hijo, y la del nieto también! Marina aceleró el paso. Sus piernas la llevaban lejos del parque, lejos de esa voz y sus reproches. Iván se movía suave, sin despertarse. Lucía seguía gritando algo, pero Marina ya no oía. Ni podía ni quería. Sólo cuando la distancia fue suficiente y los gritos se apagaron, Marina respiró hondo. Las manos le temblaban. El corazón latía en la garganta. ¿Cómo se atrevía Lucía? ¿Cómo podía culparla a ella? …Le vinieron los recuerdos como una ola. Aquella noche. El piso. La puerta que Marina había abierto una hora antes de lo habitual. El marido —exmarido— y la mujer. En su propia habitación. En su propia cama. Marina no gritó ni lloró entonces. Simplemente empezó a recogerle las cosas. Sergio intentó justificarse, balbuceando que fue un error, que no significaba nada. Marina, en silencio, señaló la puerta. Tres días después pidió el divorcio. A las dos semanas supo que estaba embarazada. Y se lo contó al que todavía no era su exmarido. Lucía llegó entonces a casa de Marina, llamando a la puerta con tal insistencia que Marina abrió. — ¡Cancela el divorcio! —gritó la suegra ya desde el pasillo—. ¿Qué haces? ¡Estás embarazada! ¡El niño necesita a sus padres! ¡Tienes que perdonar a mi hijo! ¡No estás en posición de exigir! Marina, agotada, se apoyó en la pared. Y Lucía seguía: — Ha sido un desliz. Todos los hombres lo tienen, para eso son hombres. Pero tú eres mujer: debes perdonar, pensar en la familia, en el niño. — ¿En el niño al que le dará vergüenza su padre? —susurró Marina. — ¿Vergüenza? —indignada, la suegra— ¿Cómo te atreves? ¡La que debería avergonzarse eres tú! ¡Por romper la familia con tu orgullo! ¡Por egoísmo! — ¿Has pensado cómo crecerá un niño sin padre? ¡Por una traición tampoco hay que ser tan delicada… Por los hijos se pasa por alto muchas cosas! Marina cerró los ojos. — Señora Lucía, márchese. Por favor. — ¡No me voy! —pisó fuerte la suegra— No me voy hasta que entres en razón. ¡Eres tozuda! ¡Estás arruinando el futuro de tu hijo! Pero Marina no canceló el divorcio. Pronto estuvo sola. Y después llegó Iván. Pequeño, cálido, suyo, sólo suyo… Marina ni pidió pensión. Ni registró a Sergio como padre. Él lo dejó claro, ese hijo no le importaba. Marina trabajaba desde casa y ganaba bien. Su madre ayudaba cuando lo necesitaba o para descansar. De la familia del exmarido no exigía nada. No pidió ni un euro. El ex nunca llamó. Ni preguntó si fue niño o niña. Ni si nació bien. Le daba igual. Eso estaba claro desde el principio. Pero Lucía atacaba por todos lados. Se presentó en el hospital el día del alta sin invitación. Plantada a la puerta con un ramo enorme. — ¿Cómo lo has llamado? —preguntó en cuanto Marina salió con el bebé. — Iván, —respondió Marina. El rostro de Lucía se torció. — ¿Iván? ¿Y por qué no Nicolás, como mi padre? ¡Te lo pedí! — Usted lo pidió, señora Lucía. Pero es mi hijo, y lo he llamado como quise. Exsuegra apretó los labios pero se calló. …Después empezaron las visitas. Lucía venía cinco veces por semana. Sin llamar, sin avisar. Aparecía en la puerta y exigía ver al nieto. Repartía consejos: cómo alimentar, envolver, bañar, dormir, llevar, pasear… Marina aguantaba, escuchaba sin más, asentía, y hacía lo suyo. Pero un día, se hartó. — ¡Ya basta, señora Lucía! —gritó Marina cuando la suegra criticó una vez más la elección de la leche— ¡Deje de decirme lo que tengo que hacer! ¡Es mi hijo! ¡Mío! Yo sé cómo cuidarlo y qué darle! Lucía se puso blanca como la pared, luego roja como un tomate… — ¿Me gritas? ¿A mí? — Sí, le grito. ¡Ya no puedo más! Viene todos los días y solo me machaca, me critica, me reprocha. ¡Estoy harta! Lucía giró sobre sus talones y se fue, pisando fuerte. Desde entonces venía menos, sólo dos veces por semana, pero cada visita era un martirio. Y ahora, ni en la calle estaba tranquila. Marina entró al portal y subió a casa. El piso era cálido, silencioso. Puso a Iván en la cuna, se quitó el abrigo y se dejó caer en el sofá. Las palabras de Lucía seguían resonando. “Has destrozado la familia”. ¿Ella? ¿Acaso no fue el marido quien pisoteó todo lo suyo? ¿No fue él el que traicionó? Marina sólo quería criar a su hijo. ¿Qué hay de malo en ello? Iván respiraba tranquilo en la cuna. Marina se acercó, le arregló la manta. El pequeño sonrió dormido. Todo bien, se dijo. Todo como debe ser… Pasaron dos semanas tranquilas, en paz. Lucía ni apareció ni llamó. Marina empezaba a confiar en que por fin la dejaría en paz. Pero el sábado por la mañana sonó el timbre. Insistente, seco. Marina abrió. En el umbral estaba Lucía. — Buenos días, —soltó la suegra, entrando apresurada. Marina ni contestó, se quedó quieta, mientras la exsuegra iba directa a la habitación infantil, donde Iván jugaba en el parque. Se inclinó sobre él y murmuró: — ¡Mi nietecito, mi cielo, mi tesoro! Marina la siguió, brazos cruzados. — Señora Lucía, ¿qué ocurre? La suegra se giró, sonriente: — ¡Mañana son las bautizos! ¡Ya está todo organizado! Iglesia, padrinos, todo listo. Marina la miró, atónita. — ¿Cómo? — El bautizo, —repetía Lucía en tono obvio—. Mañana a las dos. Elegí buena iglesia, buenos padrinos. Todo preparado. Marina dio un paso al frente. — ¡No puede decidir cuándo serán los bautizos de mi hijo! Lucía se irguió, con sonrisa dura. — Sí que puedo. ¿Quién si no? ¿Tú, incapaz? — ¡Yo! —exclamó Marina—. ¡Soy su madre! — ¿Tú? —bufó la suegra—. ¡Eres joven y tonta! ¡No tienes ni idea! Yo tengo experiencia, sé lo que está bien. Debes obedecerme, sola no lo criarás bien. No eres adulta aún. Algo en Marina ardió. Todo el dolor acumulado, humillaciones, rabia, todo junto estalló. — ¡No tiene ningún derecho a estar aquí! ¡Ninguno! Lucía retrocedió un paso. — ¿Cómo que ninguno? ¡Aquí vive mi nieto! — ¡No en papeles! —Marina avanzó—. En el acta de nacimiento pone raya. Oficialmente, no tiene padre. Así que usted no tiene nieto. Hasta que eso no cambie, no vuelva a aparecer por aquí. Lucía empalideció, los labios temblando de indignación. — ¿Me… me está echando? — Sí, —respondió Marina, firme—. Márchese. La suegra tomó el bolso y salió disparada. Iván en el parque lloriqueó. Marina lo tomó en brazos y lo acunó. — Todo está bien, pequeñín —susurró—. Todo está bien. Una semana de silencio. Luego, otra vez el timbre. Marina abrió y se quedó estática. En la puerta estaban dos. Lucía y el exmarido. Sergio, aspecto cansado, irritado. La madre lo tenía cogido del brazo, como si temiera que escapara. — Buenos días, Marina —murmuró el ex sin mirar. Lucía lo empujó hacia dentro. Marina no logró detenerlos; la suegra arrastró a Sergio a la habitación del niño. — ¡Mira! —gritó Lucía señalando a Iván—. ¡Es tu hijo, el tuyo! ¡Debes hacerlo oficial! ¡Debes! Sergio miró de reojo al niño, pero enseguida se apartó. Marina se apoyó en el marco de la puerta. Vio el gesto terco de su ex. Sólo quedaban los últimos intentos de presionarlo. — Entonces, pediré pensión —dijo Marina. Sergio se sobresaltó y la miró de golpe. — ¿Qué? — Pensión —repitió Marina—. Tú ganas bien, Sergio. El juez me dará una buena cantidad. El rostro de Sergio se torció. — No quiero a ese niño —escupió—. ¡Madre, basta! ¡Déjame en paz! ¡Me tenéis harto! ¡No pienso responder por nadie! Salió de casa sin mirar atrás. Lucía corrió tras él. — ¡Sergio, espera! —gritaba la suegra— ¡Por tu culpa no puedo ver al nieto! ¿Entiendes? — ¡Me da igual! —la voz de Sergio se perdió ya en el portal—. ¡Me importa un bledo tú y el niño! Marina cerró la puerta. Se acercó a Iván, quien le tendía los brazos. Lo cogió y lo apretó. Una sonrisa asomó en sus labios. El plan funcionó. Al ex no le importa el niño. Y por fin ha conseguido quitarse de encima a Lucía. Todo salió como quería. Ya podía respirar. Que dicen, —pensó sonriendo—, a esos padres los veo en el cajón, con sus zapatillas blancas. Olvidan, pobres, que la vida siempre te cobra lo que haces… ¿Qué opináis de la exsuegra? Escribid vuestros comentarios y dadle a “me gusta”.