Articles of kotlin android extensions

Kotlin的合成属性发生冲突

我是Kotlin的新手。 在其他非常有趣的事情中,我发现Android扩展, 根据文档 ,我应该让我使用活动的视图,而不需要findViewById 。 实际上,通过在我的导入中添加这一行,它可以很好地工作: import kotlinx.android.synthetic.main..* 问题是当两个不同的布局包含具有相同id的窗口小部件(即合成属性的名称相同)时, 例如两个不同的TextView ,其id为txtTitle 。 假设第一个是活动,第二个属于适配器内部使用的布局。 当我尝试在第一个TextView(活动的一个)上调用一个方法时,我看不到预期的结果,就像调用将在另一个视图上完成一样。 作为对此的确认,当我调用txtTitle.parent ,我会看到其他txtTitle的父节点和兄弟txtTitle而不是预期的txtTitle 。 难道我做错了什么? 我发现绕过这个问题的唯一方法是在我的所有布局中使用不同的名称或继续使用findViewById ,但遗憾的是浪费这种语言function……

使用kotlin android扩展引用不同布局中具有相同id的视图

在我的Android项目中,我有两个布局:num_info和num_info_pack。 两者都有id“circle”的视图。 所以我认为通过layout_name.circle引用这些视图可以解决问题: val inetView = activity.layoutInflater.inflate(R.layout.num_info_pack, parent, false) inetView.circle.setBackgroundResource(background) 但圆圈用红色加下划线,它说: 过载分辨率模糊。 所有这些function都匹配。 public val View.circle:查看! 在kotlinx.android.synthetic.main.num_info_pack.view中定义 public val View.circle:RelativeLayout! 在kotlinx.android.synthetic.main.num_info_inet_plus_pack.view中定义 如果我特意说inetView.circle,为什么我在谈论哪个圈子?

在Kotlin中使用@Parcelize Annotation的NoSuchMethodError

我正在尝试实验(这可能就是为什么它不起作用……) @Parcelize注释来生成@Parcelize代码。 大多数types似乎工作正常,但我遇到了Serializable s抛出NoSuchMethodError : 10-05 13:55:18.549 20808-20808/com.app E/AndroidRuntime: FATAL EXCEPTION: main Process: com.app, PID: 20808 java.lang.NoSuchMethodError: No virtual method writeSerializable(Ljava/util/Date;)V in class Landroid/os/Parcel; or its super classes (declaration of ‘android.os.Parcel’ appears in /system/framework/framework.jar) at com.app.models.Job.writeToParcel(Job.kt) at android.os.Parcel.writeParcelable(Parcel.java:1496) at android.os.Parcel.writeValue(Parcel.java:1402) at android.os.Parcel.writeArrayMapInternal(Parcel.java:724) at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1408) at android.os.Bundle.writeToParcel(Bundle.java:1157) at android.os.Parcel.writeBundle(Parcel.java:764) at android.content.Intent.writeToParcel(Intent.java:8687) at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3082) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1518) at […]

Kotlin,Java,multidex,Dagger 2,Butterknife和Realm:transformClassesWithJarMergingForDebug:重复条目:org / jetbrains / annotations / NotNull.class

我们有现有的Java Android代码。 我们希望无痛地慢慢开始转向Kotlin。 我们使用Dagger 2,Butterknife和Realm。 我们使用Java 8编译器(但我们的targetCompatibility和sourceCompatibility是1.7)。 我已经在网上漫游了几个小时,看过SO,GitHub对话等等,并设法解决除了一个以外的所有问题: 构建成功,但在尝试调试时,我们得到: Error:Execution failed for task ‘:app:transformClassesWithJarMergingForDebug’. > com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: org/jetbrains/annotations/NotNull.class 有没有办法解决Gradle中的重复条目(可能使用packagingOptions或resolutionStrategy ?因为它是来自插件的重复……?)? 再次 – build project没有任何错误,只有transformClassesWithJarMergingForDebug失败! 这是应用程序的gradle: apply plugin: ‘com.android.application’ apply plugin: ‘kotlin-android’ //apply plugin: ‘com.neenbedankt.android-apt’ apply plugin: ‘realm-android’ kapt { generateStubs = true } android { signingConfigs { config { keyAlias ‘MyAndroidKey’ keyPassword ‘password’ […]

Kotlin自定义对话框参数指定为非null

我收到了这个错误: 引起:java.lang.IllegalArgumentException:指定为非null的参数为null:方法kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,参数savedInstanceState 当我试图在Kotlin中膨胀自定义对话框时,我在对话框中的super.onCreate行上得到了我上面写的错误。 对话框代码是: class Custom_Dialog_Exit_App(var activity: Activity)// TODO Auto-generated constructor stub : Dialog(activity, R.style.full_screen_dialog) { override fun onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) requestWindowFeature(Window.FEATURE_NO_TITLE) setContentView(R.layout.custom_dialog_exit_app) activity.window!!.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT) initView() } fun initView() { initClicks() } fun initClicks() { } } 而init是: val omer = Custom_Dialog_Exit_App(this@MainActivity) omer.show() 请帮忙

使用Kotlin Android Extensions以编程方式夸大布局

我有以下布局: 当我想在下面的活动之外使用kotlin android扩展时 ,它不起作用。 我最终做了findViewById。 … … import kotlinx.android.synthetic.main.dialog_error.* … … val view = LayoutInflater.from(context).inflate(R.layout.dialog_error, null, false) val tvErrorTitle = view.findViewById(R.id.tvErrorTitle) as TextView val tvErrorDesc = view.findViewById(R.id.tvErrorDesc) as TextView val tvErrorAction = view.findViewById(R.id.tvAction) as TextView 它不会直接从xml中提取视图。 如何在programetically inflated布局中使用它并避免findViewById ? 注意 :这个问题严格属于Kotlin Android Extensions ,而不是语言本身。 编辑我已导入两个: import kotlinx.android.synthetic.main.dialog_error.view.* import kotlinx.android.synthetic.main.dialog_error.* 但Android Studio仍尝试从R.id导入,并且无法识别这两个导入。 有什么遗漏?

Kotlin:找不到符号类Fragment或其他android类

我有一个带有viewPager的java片段。 public class FragmentWithViewPager extends Fragment { private class ViewPagerAdapter extends FragmentStatePagerAdapter { ViewPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int i) { Fragment fragment = new DeshFalView(); //<– Problem here Bundle args = new Bundle(); args.putInt("index", i); fragment.setArguments(args); return fragment; } } } 现在我有另一个片段将填充在上面的片段中,并用kotlin写成: class DeshFalView : Fragment(), DeshfalContract.View { //More code… } […]

AIDL中的parcelize注释:不兼容的types:无法将对象转换为MyCustomObject

我正在将我的模型类重写为Kotlin ,它必须是Parcelable并在AIDL : @Parcelize data class MyCustomObject(val value1: String, val value2: String) : Parcelable 在编译期间,它崩溃并出现错误: 错误:不兼容的types:对象无法转换为MyCustomObject 并在生成的代码中指向此行: if ((0!=_reply.readInt())) { _result = com.mypackagename.MyCustomObject.CREATOR.createFromParcel(_reply); } 我将这个注释用于其他目的并且没关系,仅在AIDL中我发现到目前为止不匹配。 有什么想法有什么不对吗? 编辑:5天后没有任何评论,我已经为这个问题创建了一张票 。

添加kapt以使用Room会导致编译错误

我添加了apply plugin: ‘kotlin-kapt’ ,以便能够使用Rooms annotation proccessor: compile “android.arch.persistence.room:runtime:1.0.0” kapt “android.arch.persistence.room:compiler:1.0.0” 但是,当我构建我的项目时,我得到: Folder C:\Users\…\app\build\generated\source\kaptKotlin\debug Folder C:\Users\…\app\build\generated\source\kaptKotlin\release 3rd-party Gradle plug-ins may be the cause 如果我摆脱kapt并简单地使用annotationProcessor 。 该应用程序崩溃说: java.lang.RuntimeException:找不到com.example..data.database.Appdatabase的实现。 Appdatabase_Impl不存在 关于如何使用Room的任何想法

Kotlin合成扩展和几个包括相同的布局

如果我有如下布局,如何使用kotlin合成扩展访问视图: 文件:two_days_view.xml file:day_row.xml 如何访问dayName? 我找了一些这样的: day1.dayName.text = “xxx” day2.dayName.text = “sss” 我在Studio中看到我可以访问dayName但是dayName TextView引用了哪一个? 正常,如果我只有一个包含的布局,它工作正常。 但现在我有多次包含相同的布局。 我当然可以这样做: day1.findViewById(R.id.dayName).text = “xxx” 但我正在寻找好的解决方案。 🙂