Tag: kotlin android extensions

Kotlin Gradle问题

我创建了一个用Kotlin语言编写的项目的Jar。 Jar包含以下文件夹: com jet kotlin meta-inf okio org 然后我创建了一个android项目,并添加Kotlin和Jar作为依赖项。 当我尝试执行hello world app时,会引发以下exception。 com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ‘command ‘/usr/lib/jvm/java-7-openjdk-amd64/bin/java” finished with non-zero exit value 1 我的应用程序构建gradle文件是 apply plugin: ‘com.android.application’ apply plugin: ‘kotlin-android’ android { compileSdkVersion 22 buildToolsVersion “22.0.1” defaultConfig { applicationId “abc.xyz.kotlin” minSdkVersion 15 targetSdkVersion 22 versionCode 1 versionName “1.0” } buildTypes { release { minifyEnabled false […]

在ViewHolder中使用kotlin-android-extensions

class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { fun bindata(text: SingleText){ itemView.title.text = text.title itemView.desc.text = text.desc } } 像这样的代码,Kotlin在android扩展中有任何缓存? 当我反编译Kotlin字节码 public final void bindata(@NotNull SingleText text) { Intrinsics.checkParameterIsNotNull(text, “text”); ((AppCompatTextView)this.itemView.findViewById(id.title)).setText((CharSequence)text.getTitle()); ((AppCompatTextView)this.itemView.findViewById(id.desc)).setText((CharSequence)text.getDesc()); } 这意味着当我在Adapter.onBindViewHolder()中调用binData时,它会每次调用findViewById 这大大增加了性能的损失,并没有达到布局重用的目的 Kotlin在ViewHolder的android扩展中有任何缓存逻辑?

Kotlinx从错误的布局注入视图

我有一段代码检查视图是否可见 import kotlinx.android.synthetic.main.activity_layout.* val isOverflowPanelShown: Boolean get() = overflow_panel.visibility != View.GONE 以前的代码会抛出exception java.lang.ClassCastException: android.widget.FrameLayout cannot be cast to android.widget.ScrollView at com.company.app.Activity.isOverflowPanelShown(Activity.kt:362) 该视图是ScrollView类的实例,但是kotlin认为它是一个FrameLayout 。 调用findViewById()在相同的地方作为错误被抛出正确返回ScrollView。 我发现在应用程序的不同布局中, 在相同的ID下有一个FrameLayout 。 我正在充气下面的布局 activity_layout 在另一个布局中,我使用完全不同的地方,有一个不同的视图,具有相同的ID。 form_component_main

Kotlin的@Parcelize在writeToParcel()上抛出NPE

我有这个数据类的集合,都在同一个文件中: @Parcelize data class Response(val RecordView: RecordView):Parcelable @Parcelize data class RecordView(val Records: List):Parcelable @Parcelize data class Gid(val Value: String):Parcelable @Parcelize data class Features(val Fields: List, val FeatureName: String, val Title: String):Parcelable @Parcelize data class Fields(val Label: String, val Value: String, val FieldName: String, val Features: List):Parcelable @Parcelize data class Records(val Gid: Gid, val ImageIds: List, […]

使用Rx-Java时,Android视图在旋转后为空

我正在使用Kotlin Android Extensions访问片段中的所有视图,该视图按预期工作,即使在屏幕旋转后也可以正常访问。 当我尝试访问Rx-Java可观察间隔内的视图时,问题就开始了: var interval = Observable.interval(10, TimeUnit.SECONDS, Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) interval.retry().subscribe { updateUi(); } 如果我间隔旋转屏幕。 updateUi()方法下次作为observable的一部分运行时,其内部的视图将为空,并且应用程序将崩溃,并出现以下exception: io.reactivex.exceptions.OnErrorNotImplementedException:text_view不能为null 但是,如果我尝试运行可观察性以外的方法,一切都将正常工作。 我知道,使用findViewById()访问视图将正确地检索视图,但是这会破坏具有kotlin-android-extensions的purpuose。

为什么设置onClickListener一次工作?

我想把一个非常坚实的项目结构迁移到Kotlin上。 我首先尝试了基础:活动和片段交易。 看起来如此简单和容易: class MainActivity : AppCompatActivity(), SomeInterface { override fun onCreate(savedInstanceState: Bundle?) { setContentView(R.layout.activity_main) val mainFragment = supportFragmentManager.findFragmentById(R.id.fragment_main) as MainActionsFragment? ?: MainActionsFragment.newInstance() supportFragmentManager.inTransaction { add(R.id.container_main, mainFragment) } } private val anotherFragment by lazy { supportFragmentManager.findFragmentById(R.id.another_fragment) as AnotherFragment? ?: AnotherFragment.newInstance() } override fun myInterfaceMethod() { replaceFragment(anotherFragment, R.id.container_main) } } class MainActionsFragment : Fragment() { val […]

如何从kotlin的道路上获得歌曲的ALBUM ART?

请告诉我如何从媒体文件路径中获取媒体文件的专辑封面。 我已经尝试了下面的代码: override fun onBindViewHolder(holder: MyViewHolder?, position: Int) { var songObject = items.get(position) retiever.setDataSource(songObject.songData) var art = retiever.embeddedPicture var image = BitmapDrawable(BitmapFactory.decodeByteArray(art,0,art.size)) holder?.art_icon?.setBackgroundDrawable(image) holder?.title?.text = songObject.songTittle holder?.artist?.text = songObject.songArtist holder?.album?.text = songObject.songAlbum SongPlayingManager(items,position,view).check() holder?.complete_song_view?.setOnClickListener { SongPlayingManager(items,position,view).playSong() } } 此代码不起作用& LogCat显示以下错误: 进程:com.vikanshu.echo,PID:15640 java.lang.NullPointerException:尝试获取null数组的长度

Kotlin的视图绑定扩展在65k方法限制之后停止工作

达到65k方法限制后,Kotlin的视图绑定扩展停止工作,并在引用视图时抛出NullPointerException。 我试图安装MultiDex,但没有解决问题。 我正在使用Android API 25,不使用ProGuard并编译调试风格。 我能做什么? 这是一个错误的例子 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.jj.pos, PID: 5906 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jj.pos/com.jj.pos.features.authentication.LoginActivity}: java.lang.NullPointerException: Attempt to invoke virtual method ‘void android.widget.TextView.setText(java.lang.CharSequence)’ on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) […]

什么是KTX(Kotlin扩展库),为什么它在Android开发中越来越受欢迎

大段引用 如何开始使用Android的KTX。

Kotlin Android扩展缓存合成属性还是每次调用findViewById()?

如果我有一个简单的自定义视图: myitem.xml 访问一个kotlinx syntentic属性: import kotlinx.android.synthetic.main.myitem.view.* view.toolbar.text = “Some text” 它在内部生成对findByViewID()的调用。 所以我的问题是: 结果缓存为自定义视图像活动或每次每次调用findByViewID被调用? 性能方面的原因,答案非常重要。