2015-11-25 12 views
9

Ho un layout che include un altro layout:Estensioni Android Kotlin: come ottenere un riferimento a una vista in un layout che viene incluso in un altro layout?

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> 

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> 

Come posso ottenere un riferimento al TextView nel layout incluso? Non è supportato (ancora)?

MainActivity:

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 " 
    } 
} 

risposta

10

Si dovrebbe import il layout incluso.

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" 
    } 
} 
+2

Non è possibile semplicemente importare automaticamente? –

+0

ho lo stesso problema, quando impongo questa riga: import kotlinx.android.synthetic.main.included_layout. * ottengo un problema (riferimento non risolto: kotlinx) puoi aiutarmi per favore? –

+2

che dire se hai due include dello stesso layout? –

Problemi correlati