我有一个variablesdatePurchased的项目,可以为null。 根据购买日期,我生成一个标签。 当我检查datePurchased是否为空,否则我仍然必须检查为空。 它说聪明的演员是不可能的,因为这是一个可变的财产。 以下是我迄今为止所尝试的: if (datePurchased == null) { “” } else { if (datePurchased.isToday()) {//error here } } when { datePurchased == null -> { } datePurchased.isToday() -> {//smart cast bla bla mutable bla bla datePurchased?.isToday() -> {//expected Boolean, got Boolean? datePurchased?.isToday()?:false -> {//all good, but does not look nice, since datePurchased can’t […]
我正在进行HTTP请求页面。 这个页面有西里尔文字符。 如何将CP1251中的答案转换为UTF8? 这是我的代码。 package bash import com.github.kittinunf.fuel.httpGet import com.github.kittinunf.result.Result fun main(args: Array) { val bashImHost = “http://bash.im/” bashImHost.httpGet().responseString { request, response, result -> when (result) { is Result.Failure -> { println(“Some kind of error!”) } is Result.Success -> { val htmlBody = result.value val parsePattern = “(.+)” val parseRegex = Regex(parsePattern) val results = […]
我有一个包含CircleShape的片段class FlipFragment : Fragment() 。 当我按下CircleShape时,我调用一些animation来改变它的资源的方法。 我需要这样做,当animation正在工作 – onTouch被禁用。 我怎么能做到这一点? class FlipFragment : Fragment() { private var layout = R.layout.view_flip private lateinit var CircleShape: ImageView override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { var view: View = inflater!!.inflate(layout, container, false) CircleShape = view.findViewById(R.id.fShapeView) Log.i(“TAG”, CircleShape.isClickable.toString()) CircleShape.setOnClickLiastener { mechanics() } return view } private […]
比方说,我有一个更高阶的函数,它注册某种点击监听器。 我可以记录它的目的和传入的listener参数,如下所示: /** * Adds a [listener] that’s called when the item is clicked. * * @param listener The listener to add */ fun addClickListener(listener: (count: Int) -> Unit) { … } 我的问题是,有没有办法来记录listener的参数? 这将在这个例子中count 。 在我的实际使用情况中,我的侦听器中有多个参数。 我注意到的是[listener]文本在我使用这个函数的文档视图中是可点击的,但它只是显示一个空的对话框。 有没有办法在那里描述参数呢? 现在,我已经在addClickListener方法中用@param块描述了监听器的@param ,但是这会在IDE中产生一个警告,我想知道是否有更合适的方法来实现它。
如果您尝试在界面上创建内联函数,则会出现错误: ‘inline’ modifier is not allowed on virtual members. Only private or final members can be inlined ‘inline’ modifier is not allowed on virtual members. Only private or final members can be inlined 我明白,这是因为该function是虚拟的,因为它可以被覆盖。 如果我们能够声明“关闭”function,这些function将不是虚拟的,因此可以内联,这是非常有用的! 使用“私人”给我们一个非虚拟的“封闭”function,但是世界其他地方却不能使用它! 所以..有没有办法为抽象types定义“封闭的”非虚拟可嵌入函数? ( ps我打算自己回答这个问题,但可以自由分享你自己的答案! )
我想将一个View.OnClickListener附加到Button 。 我不想让OnClickListener成为内联匿名函数定义。 相反,我想在onCreateView()函数的范围之外定义它。 在Java中,我会这样做,如下所示: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.my_layout, container, false); View my_btn = view.findViewById(R.id.my_btn); my_btn.setOnClickListener(handleButtonClick); return view; } View.OnClickListener handleButtonClick = new View.OnClickListener() { @Override public void onClick(View v) { Log.d(“my_tag”, “click!”) } } 其他答案似乎表明下面的工作,但它不为我编译: override fun onCreateView(name: String?, context: Context?, attrs: AttributeSet?): View […]
我试图做一个应用程序使用导航抽屉活动但我需要使用碎片当我是添加片段,并试图切换片段之间的崩溃我不是为什么它崩溃事务抛出一个错误: Process: com.a3.aakap.ftrial, PID: 6958 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.a3.aakap.ftrial/com.a3.aakap.ftrial.MainActivity}: java.lang.RuntimeException: com.a3.aakap.ftrial.MainActivity@9483ac4 must implement OnFragmentInteractionListener 而我无法修复它,因为我是新的在这里这是我的MainAcivity.kt文件: class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) setSupportActionBar(toolbar) fab.setOnClickListener { view -> Snackbar.make(view, “Replace with your own action”, Snackbar.LENGTH_LONG).setAction(“Action”, null).show() } val toggle = ActionBarDrawerToggle(this, drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) drawer_layout.addDrawerListener(toggle) toggle.syncState() nav_view.setNavigationItemSelectedListener(this) […]
我想知道如何在这个特定的情况下正确使用in / out方差修饰符。 我有一个具有特定的实现types的genericsMap ,我想分配给一个更通用的types的variables: var generalMap: Map<SimpleExpression, Any> = emptyMap() var specificMap: Map = makeSomeMap() generalMap = specificMap // this assignment won’t compile 🙁 而且, StringExpression扩展了SimpleExpression 。 我试过在generalMap定义中使用差异修饰符来修改一些不同的方法: var generalMap: Map<out SimpleExpression, out Any?> = emptyMap() …但不幸的是跑到相同的编译器错误。
创建一个测试用例来表示我正在尝试做什么。 我无法弄清楚如何“停止”继续在匿名函数中工作。 在下面的例子中,如果答案是正确的,我想跳出“苹果”部分。 下面的代码不能编译,因为它说的是返回@苹果而不是返回@香蕉这是唯一有效的选项,但我写下来试图解释我想要达到的目标,并更好地理解如何去做类似这个。 class FunctionBreakingTest { @Test fun stopInMiddleOfLambda() { var answer = “wrong” doStuff apple@ { doStuff banana@ { answer = “correct” if (answer == “correct”) { return@apple } answer = “wrong” } answer = “wrong” } assertEquals(“correct”, answer) } private fun doStuff(foo: () -> Unit) = foo.invoke() }
我有一个使用数据绑定的Android库(kotlin)。 图书馆本身编译好。 当我将库作为模块添加到另一个应用程序时,我收到大量的数据绑定错误,这似乎是我在库中使用的所有数据绑定。 在研究这个问题之后,很多人建议加入 dataBinding { enabled = true } 进入应用程序和库build.gradle文件。 即使这样做后,我仍然收到相同的错误。 我已经尝试多次清理项目,没有任何变化。 如果有人能够解释为什么图书馆将自己作为一个单独的项目建设,但是如果作为另一个项目的一个模块被包括在内,将不会构建,我将不胜感激。 应用程序 – build.gradle apply plugin: ‘com.android.application’ apply plugin: ‘kotlin-android’ apply plugin: ‘kotlin-android-extensions’ apply plugin: ‘realm-android’ apply plugin: ‘kotlin-kapt’ android { compileSdkVersion 26 defaultConfig { applicationId “cz.abc.abc” minSdkVersion 19 targetSdkVersion 26 versionCode 1 versionName “1.0” } buildTypes { release { minifyEnabled false […]