Tag: 科特兰

是否有可能在Dagger 2.11中注入Recycler View适配器

我一直在使用新的dagger.android注射功能,到目前为止,我真的很喜欢他们。 但是,我遇到了这个小问题,看来不可能现场注入适配器或基本上我使用的任何非活动类。 我知道@Inject构造函数会更容易,但是因为我通过构造函数将数据传递给了我的recyclerview,所以这不是我的选择。 这意味着我必须调用组件来注入我的类。 使用如下所示的AppComponent类: interface AppComponent : AndroidInjector<App> { @Component.Builder abstract class Builder { abstract fun networkModule(networkModule: NetworkModule): Builder } fun inject(someClass SomeClass) } 生成的DaggerAppComponent在声明DaggerAppComponent.builder().build()后不能识别.inject() DaggerAppComponent.builder().build() 我显然是误解了一些关于Dagger的东西,因为这好像是注入类的规范方式。 我怀疑这是因为我从AndroidInjector扩展,但如果是这样的话,我将如何注入一个非活动类。 因为即使我为这个类创建了一个@Subcomponent ,它仍然需要从DaggerAppComponent

我怎么能在Kotlin做一个换行符(续行)

我有很长的一行代码,我想分解成多行。 我使用什么语法? 例如,添加一堆字符串: val text = "This " + "is " + "a " + "long " + "long " + "line"

Kotlin:将数组传递给可扩展运算符的可变参数方法

我花了太长时间试图研究如何将一些Migration实例传递给Dagger2模块的Room数据库生成器。 Room数据库生成器需要上下文和数据库名称。 Room.databaseBuilder(context, Database::class.java, dbName) .build() 迁移可以通过使用vararg migrations: Migration!的addMigrations方法添加到构建器中vararg migrations: Migration! 一种选择是创建构建器。 val builder = Room.databaseBuilder(context, Database::class.java, dbName) 然后通过迁移每个 migrations.forEach { builder.addMigrations(it) } 然而这是混乱和不必要的,应该使用扩展运算符。 我设法错过了这个,因为我发现的传播运算符的唯一文档是文档中的单个句子。 当我们调用可变参数函数的时候,我们可以逐个传递参数,比如asList(1,2,3),或者如果我们已经有一个数组并且想把它的内容传给函数,我们使用spread运算符(在数组前加*)

新的建筑与匕首和Kotlin

我在Kotlin的New Architecture组件中遇到了一个问题,那就是当我用建议的方式(在onCreate()方法)中创建ViewModel组件时,结果如下所示: 在活动方向改变之后,我得到和以前一样的ViewModel实例 这是我创造这个的方式 override fun onCreate(savedInstanceState: Bundle?) { AndroidInjection.inject(this) super.onCreate(savedInstanceState) setContentView(R.layout.activity_list) val arrayMap = ArrayMap<Class<out ViewModel>, ViewModel>() arrayMap.put(ListViewModel::class.java, ListViewModel(webApi, repoDao)) val factory = ViewModelFactory(arrayMap) listViewModel = ViewModelProviders.of(this, factory).get(ListViewModel::class.java) listViewModel.items.observe({ this.lifecycle }) { Toast.makeText(this, it?.joinToString { it + " " } ?: "null", Toast.LENGTH_SHORT).show() } 但是当我使用Dagger注入ListViewModel时,每次重新创建Activity时都会得到ListViewModel的新实例。 这是一个Dagger ListActivityModel的代码。 @Module @ListActivityScopeclass ListActivityModule { @Provides @ListActivityScope fun […]

Kotlin:声明一个Activity静态的子类

在将Java代码转换为包含子类Fragment的Activity后,布局将无法正确渲染(logcat错误朝向本文底部)。 我想,因为声明一个活动的子类必须声明为静态的 ,这是我转换为Kotlin后的: class SettingsActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_settings) } override fun onOptionsItemSelected(item: MenuItem): Boolean { if (item.itemId == android.R.id.home) { finish() return true } return super.onOptionsItemSelected(item) } // Apparently the following class must be declared static. class SettingsFragment : PreferenceFragmentCompat(), OnSharedPreferenceChangeListener { override fun onCreatePreferences(savedInstanceState: Bundle, rootKey: String) […]