我知道Kotlin的Android扩展创建了合成属性+缓存功能,以取代调用findviewbyid
:
所有这些示例都表明类似的java代码如下所示
private HashMap _$_findViewCache;
...
public View _$_findCachedViewById(int var1) {
if(this._$_findViewCache == null) {
this._$_findViewCache = new HashMap();
}
View var2 = (View)this._$_findViewCache.get(Integer.valueOf(var1));
if(var2 == null) {
var2 = this.findViewById(var1);
this._$_findViewCache.put(Integer.valueOf(var1), var2);
}
return var2;
}
public void _$_clearFindViewByIdCache() {
if(this._$_findViewCache != null) {
this._$_findViewCache.clear();
}
}
<TextView
android:id="@+id/welcomeMessage"
...
android:text="Hello World!"/>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
welcomeMessage.text = "Hello Kotlin!"
}
WelcomeMessage
是什么类型?textview
还是textview?
我不明白的是这是如何防止潜在的NPE的?
它没有。如果尝试引用不存在的小部件,则会崩溃。
只要import
语句只针对Kotlin代码的相关布局,就不应该引用不存在的小部件。问题是,如果您意外地从另一个布局导入合成属性。
package com.commonsware.android.myapplication
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import kotlinx.android.synthetic.main.scrap.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
scrapView.visibility = View.GONE
}
}
Caused by: java.lang.IllegalStateException: scrapView must not be null
at com.commonsware.android.myapplication.MainActivity.onCreate(MainActivity.kt:14)
我试图将每个列表都位于嵌套对象内的webservice模型映射到更简单的对象。 模型1 映射非常简单: 映射工作正常,除了一个问题。当我将带有null子级的父母映射到父母2并返回父母时,儿童对象是用空列表创建的。有什么方法可以防止这种情况吗?
我查阅了关于单元素元组的文档,对它如何防止空间泄漏有点困惑,这让我怀疑我对Haskell内存模型和/或垃圾收集器的工作原理一无所知。 引用文件,他们说: Solo最重要的特性是可以强制其“外部”(通常通过模式匹配)而不强制其“内部”,因为它被定义为数据类型而不是新类型。在编写函数以从数据结构中提取值时,这可能很有用。假设您编写了数组的一个实现,并且只提供此函数来索引数组: 这实际上会导致空间泄漏。
问题内容: 在python中,如果我说 我收到字母h和换行符。如果我说 我收到字母h,没有换行符。如果我说 我得到字母h,一个空格和字母。如何防止Python打印空间? 打印语句是同一循环的不同迭代,因此我不能只使用运算符。 问题答案: 你需要致电,因为否则它将把文本保存在缓冲区中,你将看不到它。
假设我们想用它的摩尔斯码替换字母“a”,从text.txt文件到使用sed的隐藏的.out.txt文件,原始文件的内容是“这是一个测试”。 正如预期的那样,输出是“this is.-test”。 但是,假设我们希望执行sed的多个实例,而不需要使用-n参数不断打印sed的每个实例的结果。在这种情况下: 然而,在这种情况下,cat的输出与text.txt的内容相同,“这是一个测试”。 是否有一种可能
问题内容: 我需要从OracleSQL中的employees表中显示Employee及其佣金金额,但是条件是如果它遇到值,我需要打印_“ No Commission”_ 。 在第一部分中,我写道: 但是我无法获得如何用 “ No Commission” 代替价值观。 问题答案: 您可以使用表达式: 或: 或: PS如果不是数据类型,则也应使用或。
问题内容: 请看下面的简化示例: 这打印出来,但我希望所选的html部分照原样打印:。我如何告诉jsoup不要转换’<’符号? 问题答案: 可以使用jsoup。 使用jSoup 1.8.3,可以使用保留原始html的Parser.unescapeEntities方法。 在某些以前的版本中,不存在此方法。 从此链接了解更多信息。