Articles of 科特林

如何从里面引用lambda?

我想在onCreate方法获取视图的高度,但我找不到任何方法来删除OnGlobalLayoutListener。 在Java(工作)中: containerLayout.getViewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { containerLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this); int width = layout.getMeasuredWidth(); int height = layout.getMeasuredHeight(); } }); 在Kotlin(不接受“这个”): containerLayout.viewTreeObserver.addOnGlobalLayoutListener { containerLayout.viewTreeObserver.removeOnGlobalLayoutListener(this) Toast.makeText(applicationContext, "size is "+ containerLayout.height,Toast.LENGTH_LONG).show() } 有没有这个问题的参考或例子? 谢谢。

匕首2在Kotlin未解决的参考

我正在尝试在我的Android项目中使用Dagger 2,并在Kotlin中进行编码。 我从Dagger 2回购Android的简单的例子。 我已经设法在Android Studio中使用来自dagger-android-gradle-sample的示例正确configuration项目,它包含正确configuration的gradle文件。 现在我开始将java类更改为kotlin。 这是自动转换的DemoApplication.java在kotlin中的样子: public class DemoApplication : Application() { Singleton Component(modules = array(javaClass<AndroidModule>())) trait ApplicationComponent { public fun inject(application: DemoApplication) public fun inject(homeActivity: HomeActivity) public fun inject(demoActivity: DemoActivity) } public var component: ApplicationComponent? = null override fun onCreate() { super.onCreate() component = `Dagger_DemoApplication$ApplicationComponent`.builder().androidModule(AndroidModule(this)).build() component!!.inject(this) } } 匕首生成的类在Kotlin中可见,但它抱怨($)类名称中使用的符号。 ($)在Kotlin有特殊的目的,所以我想这就是为什么。 你可以注意到auto-convertion用(`)符号封装类名,所以编辑器不会抱怨它。 不幸的是,编译器失败: […]

ArrayAdapter使用Kotlin android

对不起我的英语不好。 我学习kotlin,现在我需要写ArrayAdapter,但我有一些错误,当尝试做这个convertView = vi.inflate(resource, null) kotlin说我Val cannot be reassigned 。 在网站kotline我转换java类到kotlin类,并尝试做像这个网站。 为什么我有错,我该如何解决这个问题? open class MyAdapter(context: Context, resource: Int, list: ArrayList<MyItems>) : ArrayAdapter<MyItems>(context, resource, list) { var resource: Int var list: ArrayList<MyItems> var vi: LayoutInflater init { this.resource = resource this.list = list this.vi = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater } override fun getView(position: Int, convertView: View?, parent: […]

Kotlin:安全的lambdas(没有内存泄漏)?

在阅读了关于内存泄漏的这篇文章之后,我想知道在Kotlin Android项目中使用lambdas是否安全。 确实,lambda语法使得我的程序更加轻松,但是内存泄漏呢? 作为一个有问题的例子,我从我的一个项目中取得了一段代码,在那里构build了一个AlertDialog。 这段代码在我的项目的MainActivity类中。 fun deleteItemOnConfirmation(id: Long) : Unit { val item = explorerAdapter.getItemAt(id.toInt()) val stringId = if (item.isDirectory) R.string.about_to_delete_folder else R.string.about_to_delete_file val dialog = AlertDialog.Builder(this). setMessage(String.format(getString(stringId), item.name)).setPositiveButton( R.string.ok, {dialog: DialogInterface, id: Int -> val success = if (item.isDirectory) ExplorerFileManager.deleteFolderRecursively(item.name) else ExplorerFileManager.deleteFile(item.name) if (success) { explorerAdapter.deleteItem(item) explorerRecyclerView.invalidate() } else Toast.makeText(this@MainActivity, R.string.file_deletion_error, Toast.LENGTH_SHORT).show() }).setNegativeButton( R.string.cancel, […]

Smartcast是不可能的,因为propery有开放或自定义的getter

我正在学习Kotlin。 我的代码如下: override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) decoupler.attachNotifier(this) if(activity is ScreenRouter) { decoupler.attachRouter(activity) } } attachRouter()方法: fun attachRouter(router: ScreenRouter?) { this.router = router } 正如在文档中所写的,kotlin在与操作员核对之后自动进行types转换。 所以,我预计它会工作。 但相反,它困扰我编译错误说: Smartcast到ScreenRouter是不可能的,因为activity是一个开放的或自定义的getter。 我想也许错误是因为活动可以为空,所以我试过: if(activity!=null && activity is ScreenRouter) { decoupler.attachRouter(activity) } 但它没有工作,编译失败,同样的错误。 但是,下面的代码工作正常: if(activity is ScreenRouter) { decoupler.attachRouter(activity as ScreenRouter) } 它没关系,但上面的错误似乎没有解释为什么smartcast失败的任何事情。 我不是Kotlin的专家,我只是一个学习Kotlin的初学者。 我没有find任何文件。 这些错误的描述使Kotlin可怕的学习。 […]

Kotlin文件与类。 有什么不同?

刚开始使用Kotlin,并创build了一些Kotlin文件的活动。 他们的工作,但仍然,我想知道什么是在Android Studio中创build一个文件和类之间的区别。

Dagger 2命名不能没有@Provides方法提供

试图咆哮匕首2,并与指定的提供商有问题。 我有一个简单的设置如下: // Module @Module class AppModule(private val app: App) { @Provides @AppScope fun providesApp() = app @Provides @AppScope fun provideSharedPreferences(app: App) = PreferenceManager.getDefaultSharedPreferences(app) @Provides @AppScope @Named("Uri1") fun providesUri1() = Uri.Builder().scheme("https").authority("authory1").build() @Provides @AppScope @Named("Uri2") fun providesUri2() = Uri.Builder().scheme("https").authority("authory2").build() } // Component @AppScope @Component(modules = arrayOf(AppModule::class)) interface AppComponent { fun inject(target: MainActivity) } // MainActivity @Inject […]

在Kotlin中是否有像#region#endregion的语法?

我知道我可以使用#region #endregion在C#中包含代码片段,Kotlin中是否有类似的语法? 谢谢! #region MyRegion protected void Page_Load(object sender, EventArgs e) { } #endregion

SonarQube – Android不工作的Gradle 3.0.0

Android声纳工作,直到我更新Android工作室。 现在它给了一个错误 FAILURE: Build failed with an exception. * What went wrong: com.android.build.gradle.api.ApkVariant.getCompileLibraries()Ljava/util/Collection; 我认为这是因为gradle依赖语法从“ 编译 ”更改为“ 实现 ”,如下面在最新的Android版本。 从 dependencies { compile …….. compile …….. } 至 dependencies { implementation …….. implementation …….. } 任何人都可以请帮我configurationsonarqube新的android版本

用Kotlin在android中声明UI组件的最好方法是什么?

我正在尝试使用Kotlin第一次构buildAndroid应用程序。 我想在OnCreate方法之外的某些button上声明,我只能初始化它们在这个函数中,使用findViewById。 我可以声明简单和干净的代码,如在Java中? private Button btnProceed; 因为当它转换成Kotlin它看起来像: private var btnProceed: Button? = null 然后当初始化OnClick函数需要添加! 标志: btnProceed!!.setOnClickListener 什么是正确和最清洁的方式?