在对话框中检索视图

时间:2018-03-15 19:25:18

标签: kotlin findviewbyid

我试图操纵对话框中的视图,但我可以检索视图的唯一方法是采用Java老式方式,如下所示:

 class MyDialog: DialogFragment() {
        override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
            val alert = AlertDialog.Builder(context!!)
            val inflater = LayoutInflater.from(activity)
            val view = inflater?.inflate(R.layout.pg_dialog, null)
            with(alert) {
                setView(view)
                setNeutralButton(R.string.scambio_back, DialogInterface.OnClickListener({ _: DialogInterface, _: Int -> dialog.dismiss() }))
            }
            view?.findViewById<TextView>(R.id.dialog_name)?.text = person.name
            view?.findViewById<TextView>(R.id.dialog_surname)?.text = person.surname

            return alert.create()
        }
    }

你知道在Kotlin中检索内部视图的任何方法,避免使用findViewById吗?

[编辑]这是build.gradle文件:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 27
defaultConfig {
    applicationId "com.project.persons"
    minSdkVersion 21
    targetSdkVersion 27
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:27.0.2'
    implementation 'com.android.support:recyclerview-v7:27.0.2'
    implementation 'com.android.support:cardview-v7:27.0.2'
    implementation 'com.android.support:design:27.0.2'
    implementation 'com.android.support:support-v4:27.0.2'

    // Firebase
    implementation 'com.google.firebase:firebase-auth:11.8.0'
    implementation 'com.google.firebase:firebase-database:11.8.0'

    implementation 'com.firebaseui:firebase-ui-auth:3.2.2'

    implementation 'com.facebook.android:facebook-android-sdk:4.30.0'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
}

apply plugin: 'com.google.gms.google-services'

2 个答案:

答案 0 :(得分:2)

在这种情况下,如果您不在FragmentActivity,但有View引用要搜索具有给定ID的子项,则可以使用具有以下语法的Kotlin Android Extensions:

view.dialog_name.text = person.name
view.dialog_surname.text = person.surname

与使用Extensions时一样,请确保您拥有正确的导入。

答案 1 :(得分:0)

既然你的问题有点不清楚我会说你提到这样的事情:

apply plugin: 'kotlin-android-extensions

中导入build.gradle

然后您必须在Activity

中导入此内容
import kotlinx.android.synthetic.main.activity_pg_dialog.*

例如,如果您的TextView标识为test,则可以执行以下操作:

test.setText("test text!!")

参考文献:

Documentation Kotlin Android Extensions

Example Kotlin Android Extendions