你好! 预期将推出有关Android开发的基础课程 ,因此我们分享了文章“用Kotlin语言编写的16个android开发技巧”的最后部分。
阅读第一部分阅读第二部分拉丁语
Kotlin的主要功能之一是对零安全性的承诺。 lateinit语句提供了一种确保Android零安全并初始化变量的简便方法。 这个功能很棒,但是,在使用Java之后,您应该习惯它。 一种想法是立即声明该字段为空:
var total = 0 var toolbar: Toolbar? = null
使用Android布局时,此语言功能可能会造成困难,因为我们不知道如何在声明布局之前声明视图,因为尚不清楚它们在
Activity
或
Fragment
。 这可以通过额外的测试来弥补,因为我们在与之交互的每个位置都将零值设为零,但这仍然是痔疮。 因此,最好使用
lateinit
修饰符:
lateinit var toolbar: Toolbar
现在,作为开发人员,在实际对其进行初始化之前,您不应该引用它。 与
黄油刀之类的库配合使用时,效果很好:
@BindView(R.id.toolbar) lateinit var toolbar: Toolbar override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) ButterKnife.bind(this)
类型安全
某些Android约定要求安全键入,因为常规键入不会排除代码错误。 例如,创建片段的典型方法是通过FragmentManager进行检查以确保它已经存在。 并且只有在不是的情况下,您才能创建它并将其添加到操作中。 当您第一次查看在Kotlin中键入内容时,可以按以下方式实现:
var feedFragment: FeedFragment? = supportFragmentManager .findFragmentByTag(TAG_FEED_FRAGMENT) as FeedFragment . as , . : var feedFragment: FeedFragment? = supportFragmentManager .findFragmentByTag(TAG_FEED_FRAGMENT) as? FeedFragment if (feedFragment == null) { feedFragment = FeedFragment.newInstance() supportFragmentManager.beginTransaction() .replace(R.id.root_fragment, feedFragment, TAG_FEED_FRAGMENT) .commit() }
杠杆让
利用杠杆作用,如果对象的值非零,则可以执行块。 这样可以避免进行空检查,并使代码更具可读性。 在Java中,它看起来像这样:
if (currentUser != null) { text.setText(currentUser.name) } Kotlin : user?.let { println(it.name) }
该代码更具可读性,而且它会自动创建一个具有非零值的变量,而不会将其归零。
SNULLOREMPTY | ISNULLORBLANK
在Android应用程序的开发过程中,我们必须多次检查这些字段。 如果您在不使用Kotlin的情况下进行管理,则可能知道Android中的TextUtils类。 TextUtils类如下:
if (TextUtils.isEmpty(name)) {
在此示例中,您会注意到用户甚至可以将空格设置为用户名,他将通过测试。
isNullOrEmpty
和
isNullOrBlank
内置于Kotlin语言中,消除了对
TextUtils.isEmpty
(
someString
)的需求,并提供了仅检查空格的额外好处。 如有必要,可以使用以下方法:
当需要在应用程序中注册时,通常会发现检查字段填写的正确性。 这些内置方法非常适合检查字段并在出现问题时提醒用户。 对于更复杂的检查,您可以对电子邮件地址使用扩展方法,例如:
fun TextInputLayout.isValidForEmail(): Boolean { val input = editText?.text.toString() if (input.isNullOrBlank()) { error = resources.getString(R.string.required) return false } else if (emailPattern.matcher(input).matches()) { error = resources.getString(R.string.invalid_email) return false } else { error = null return true } }
进阶技巧
您是否知道可以使用lambda表达式创建更简洁明了的代码?
例如,使用Java时,通常有一个简单的侦听器类,例如:
public interface OnClickListener { void onClick(View v); }
Kotlin的一个独特功能是它对Java类执行SAM(单一抽象方法)转换。 Java中的单击侦听器,如下所示:
textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) {
奇怪的是,对于在Kotlin中创建的SAM接口,这种转换是不可能的。 这可能会令人惊讶,甚至会使新的Kotlin用户失望。 如果在Kotlin中定义了相同的接口,则侦听器将如下所示:
view.setOnClickListener(object : OnClickListener { override fun onClick(v: View?) {
为了缩短这样的代码,您可以按以下方式将您的侦听器写入该类:
private var onClickListener: ((View) -> Unit)? = null fun setOnClickListener(listener: (view: View) -> Unit) { onClickListener = listener }
这将使您返回一个简单的lambda语法,从而可以进行自动SAM转换。
结论
自从对Kotlin语言感兴趣以来,我从所学的一切中收集了最有用的生活技巧。 我希望了解这些技巧将对您开发自己的项目有很大帮助。
仅此而已。 在
课程中见!