Rah*_*hul 44 android kotlin butterknife
我正在尝试将Kotlin和Butterknife用于我的Android应用程序.
这是我的build.gradle
dependencies {
...
compile 'com.jakewharton:butterknife:8.0.1'
kapt 'com.jakewharton:butterknife-compiler:8.0.1'
}
kapt {
generateStubs = true
}
Run Code Online (Sandbox Code Playgroud)
我还有一个EditText,我想在更改时使用ButterKnife显示一条消息:
@OnTextChanged(R.id.input)
fun test() {
toast(1)
}
Run Code Online (Sandbox Code Playgroud)
然而,没有任何反应.我在函数中加了一个断点 - 它甚至都没有执行.
PS:我听说过kotterknife,但是我看到了一个纯粹的Butterknife 的例子.
我究竟做错了什么?
Nik*_*hav 90
在Kotlin没有必要使用奶油刀.您可以直接使用以下内容:
// app:build.gradle文件
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion 26
buildToolsVersion "26.0.1"
defaultConfig {
applicationId "com.example.nikhiljadhav.myapplication"
minSdkVersion 15
targetSdkVersion 26
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(include: ['*.jar'], dir: 'libs')
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:26.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'com.android.support:design:26.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.0'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.0'
}
kapt {
generateStubs = true
}
Run Code Online (Sandbox Code Playgroud)
// xml布局文件
<TextView
android:id="@+id/tvHello"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="8dp"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="8dp" />
<TextView
android:id="@+id/tvId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="8dp"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="8dp" />
<EditText
android:id="@+id/etDemo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="8dp"
android:onClick="onClick"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="8dp" />
Run Code Online (Sandbox Code Playgroud)
// MainActivity.kt文件
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
// use the kotlin property
tvHello.text="Hi bla bla"
tvId.text="buubububub"
//set textcolor
tvId.setTextColor(ContextCompat.getColor(this, R.color.colorAccent))
etDemo.hint="nhdodfhfgf"
tvId.setOnClickListener{ view->
onClick(view)
}
fab.setOnClickListener { view ->
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show()
}
}
fun onClick(view: View) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show()
}
...
}
Run Code Online (Sandbox Code Playgroud)
对于onTextChangeListner:
etText.addTextChangedListener(object : TextWatcher{
override fun afterTextChanged(p0: Editable?) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
})
Run Code Online (Sandbox Code Playgroud)
小智 35
在您的应用级别build.gradle中
apply plugin: 'kotlin-android'
kapt {
generateStubs = true
}
dependencies {
compile 'com.jakewharton:butterknife:8.4.0'
kapt 'com.jakewharton:butterknife-compiler:8.4.0'
}
Run Code Online (Sandbox Code Playgroud)
在您的顶级build.gradle中
buildscript {
ext.kotlin_version = '1.1.3'
repositories {
jcenter()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
Run Code Online (Sandbox Code Playgroud)
活动
@BindView(R.id.toolbar) @JvmField var toolbar: Toolbar? = null
Run Code Online (Sandbox Code Playgroud)
要么
@BindView(R.id.toolbar) lateinit var toolbar: Toolbar
Run Code Online (Sandbox Code Playgroud)
在OnCreate里面
ButterKnife.bind(this)
Run Code Online (Sandbox Code Playgroud)
小智 15
Kotlin创建者在他们的网站上告诉我们:Kotlin Android Extensions插件(自动捆绑到Android Studio中的Kotlin插件中)解决了同样的问题:使用简洁直接的代码进行替换findViewById
.除非您已经使用ButterKnife并且不想迁移,否则请考虑使用它.
例如
// Using R.layout.activity_main from the main source set
import kotlinx.android.synthetic.main.activity_main.*
class MyActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
textView.setText("Hello, world!")
// Instead of findViewById(R.id.textView) as TextView
}
}
Run Code Online (Sandbox Code Playgroud)
textView
是一个扩展属性Activity
,它与声明的类型相同activity_main.xml
.
Pab*_*rra 10
在你的gradle中:
compile 'com.jakewharton:butterknife:8.8.0'
kapt "com.jakewharton:butterknife-compiler:8.8.0"
Run Code Online (Sandbox Code Playgroud)
在你的活动中
@BindView(R.id.toolbar)
lateinit var mToolbar: Toolbar
Run Code Online (Sandbox Code Playgroud)
当然,请记住ButterKnife.bind(this)
并在app.gradle顶部应用该插件apply plugin: 'kotlin-kapt'
丰联:https://github.com/JetBrains/kotlin-examples/tree/master/gradle/android-butterknife
将其添加到您的项目 Build.gradle 中
buildscript {
ext.kotlin_version = '1.1.2-4'
ext.butterknife_version = '8.6.0'
repositories {
maven { url 'https://maven.google.com' }
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0-alpha1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "com.jakewharton:butterknife-gradle-plugin:$butterknife_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
Run Code Online (Sandbox Code Playgroud)
并在您的应用程序 Build.Gradle 中添加此内容。
//Butterknife
compile "com.jakewharton:butterknife:$butterknife_version"
kapt "com.jakewharton:butterknife-compiler:$butterknife_version"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
40722 次 |
最近记录: |