如何用Kotlin实现一个简单的Activity

  最近,Google公司正式宣布在Studio支持Kotlin语言开发Andriod,并支持java文件直接转变为kt(kotlin)文件。在初步学习了Kotlin基本语法后,忍不住code一下,最开始是直接将项目中的java文件转变为kt文件,但发现很多地方还是会报错,需要手动修改, 很是麻烦,所以用Kotlin后面手写了一个demo。


首先,activity_main的xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.wl.activity.MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>
  准备用RecyclerView实现一个简单的GridLayoutManager布局,所以Activity代码:

package com.wl.activity

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.GridLayoutManager
import android.support.v7.widget.RecyclerView
import com.example.wl.mubanapplication.R
import com.example.wl.mubanapplication.help_class.ContextHelper
import com.example.wl.mubanapplication.model.Url
import com.example.wl.mubanapplication.ui.view.DividerItemDecoration
import com.wl.adapter.AdapterPopularLocationKotlin
import com.wl.model.SecondModelKotlin

@Suppress("UNUSED_EXPRESSION")
class MainActivity : AppCompatActivity() {
    private val MARGIN = 20

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        val recylerView = findViewById(R.id.recyclerView) as RecyclerView
        val layoutManager = GridLayoutManager(ContextHelper.getApplicationContext(), 2)
        val decoration = DividerItemDecoration(ContextHelper.getApplicationContext(), R.drawable.divider, R.color.transparent)
        decoration.setSize(MARGIN)
        decoration.setType(DividerItemDecoration.BORDER)
        recylerView.addItemDecoration(decoration)
        recylerView.layoutManager = layoutManager
        val mAdapter = AdapterPopularLocationKotlin(mContext = ContextHelper.getApplicationContext())
        mAdapter.setData(getSecondModelsKotlin() as MutableList<SecondModelKotlin>)
        recylerView.adapter = mAdapter

        val list: MutableList<SecondModelKotlin>? = getNames() as MutableList<SecondModelKotlin>?//?允许非空,不加?的话,一直不为空
        val datas: MutableList<SecondModelKotlin> = ArrayList()
        var model: SecondModelKotlin
        if (list != null) {
//            for (i in list.indices) {
//                model = list[i]
//                model.name = "Liszt" + i
//                datas.add(model)
//            }
            for (i in list) {
                model = i
                model.name = "Liszt" + list.indexOf(model)
                datas.add(model)
            }
            mAdapter.setData(datas)
        } else {
            mAdapter.setData(getSecondModelsKotlin() as MutableList<SecondModelKotlin>)
        }

            print(max(2,6))
    }

    fun max(a: Int, b: Int) = if (a > b) a else b//fun 方法,如果a>b,return a ,else return b;

    fun getSecondModelsKotlin(): List<SecondModelKotlin> {
        val list = ArrayList<SecondModelKotlin>()

        val model1 = SecondModelKotlin()
        model1.text = "Hello 1"
        model1.avatarUrl = Url.IMAGE_URL_FRANCE_1
        model1.name = "Marks 1"
        list.add(model1)

        val model2 = SecondModelKotlin()
        model2.text = "Hello 2"
        model2.avatarUrl = Url.IMAGE_URL_FRANCE_2
        model2.name = "Marks 2"
        list.add(model2)

        val model3 = SecondModelKotlin()
        model3.text = "Hello 3"
        model3.avatarUrl = Url.IMAGE_URL_FRANCE_3
        model3.name = "Marks 3"
        list.add(model3)

        val model4 = SecondModelKotlin()
        model4.text = "Hello 4"
        model4.avatarUrl = Url.IMAGE_URL_FRANCE_4
        model4.name = "Marks 4"
        list.add(model4)

        val model5 = SecondModelKotlin()
        model5.text = "Hello 5"
        model5.avatarUrl = Url.IMAGE_URL_FRANCE_2
        model5.name = "Marks 5"
        list.add(model5)

        val model6 = SecondModelKotlin()
        model6.text = "Hello 1"
        model6.avatarUrl = Url.IMAGE_URL_FRANCE_3
        model6.name = "Marks 1"
        list.add(model6)

        val model7 = SecondModelKotlin()
        model7.text = "Hello 2"
        model7.avatarUrl = Url.IMAGE_URL_FRANCE_4
        model7.name = "Marks 2"
        list.add(model7)

        val model8 = SecondModelKotlin()
        model8.text = "Hello 3"
        model8.avatarUrl = Url.IMAGE_URL_FRANCE_1
        model8.name = "Marks 3"
        list.add(model8)

        val model9 = SecondModelKotlin()
        model9.text = "Hello 4"
        model9.avatarUrl = Url.IMAGE_URL_FRANCE_2
        model9.name = "Marks 4"
        list.add(model9)

        val model10 = SecondModelKotlin()
        model10.text = "Hello 5"
        model10.avatarUrl = Url.IMAGE_URL_FRANCE_4
        model10.name = "Marks 5"
        list.add(model10)

        return list

    }

    fun getNames(): List<SecondModelKotlin>? {
        var model: SecondModelKotlin
        val list = java.util.ArrayList<SecondModelKotlin>()
        for (i in 0..49) {
            model = SecondModelKotlin()
            model.name = "hello-" + i
            list.add(model)
        }
//        return list
        return null
    }

}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值