Kotlin Android Extensions:如何获得对包含在另一个布局中的布局中的视图的引用?

luk*_*kle 15 kotlin-android-extensions

我有一个包含另一个布局的布局:

activity_main.xml中:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"/>

    <include layout="@layout/included_layout" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

included_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="match_parent">

    <TextView
        android:id="@+id/includedTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Included TextView"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

如何在包含的布局中获得对TextView的引用?是否尚未支持?

主要活动:

import android.app.Activity
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import kotlinx.android.synthetic.activity_main.*

class MainActivity : AppCompatActivity(){

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

        textView.text = "text" // works!
        textViewInclude.text = "textInclude" // does not work: "Unresolved reference: textViewInclude "
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 14

你应该import包括布局.

import android.app.Activity
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.included_layout.* // Here

class MainActivity : AppCompatActivity() {

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

        // From activity_main.textView
        textView.text = "text" 

        // From included_layout.textViewInclude
        textViewInclude.text = "textInclude"
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,如果布局是另一个模块,则不起作用.这有什么解决方案吗?我错过了什么吗? (8认同)
  • 如果你有两个相同的布局包括怎么办? (3认同)
  • 不能简单地自动导入吗? (2认同)
  • 我遇到了同样的问题,当我导入这一行时: import kotlinx.android.synthetic.main.included_layout.* 我遇到一个问题(未解决的参考:kotlinx)你能帮忙吗? (2认同)
  • 虽然这篇文章有点旧,但为了完整性,我想添加以下内容:您需要在“build.gradle”中添加并应用“kotlin-android-extensions”,以便直接从布局导入。请在[此处](/sf/ask/2391869371/)了解如何执行此操作 (2认同)