Kotlin学習ノート1

6219 ワード

ここではKotlinの文法を体系的に説明していませんが、DemoをするときにKotlin言語を意図的に使用し、使い方を記録します.公式サイトのドキュメントを見て、お勧めの本を読むことができます.
Activity
たとえばBaseActivityを作成すると、
 open class BaseActivity : AppCompatActivity() {
 }
  • open:クラスが継承するためにopenを追加する場合、またはabstract
  • を追加するキーワード
  • 継承の方式は:
  • Activityのサブクラスである以上、onCreateメソッドを書き換えるときに自動的にコードを補完します.
    open class BaseActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
        }
    }
    
  • override:見なくてもわかる方法で覆われています
  • funは定義方法
  • である.
  • 注意方法パラメータの表現方式はJavaと少し違い、まず変数名で、それからタイプを示す.
  • 注意疑問符?Kotlinは空の安全で、ここでBundleが空であることを示して、初めてKotlinを独学して、理解するのはあまりよくなくて、指摘してください.

  • Button
    Activityを作成したのは、もちろんいくつかのボタンを追加し、傍受します.
    val btn_scale = findViewById(R.id.btn) as TextView
    btn_scale.setOnClickListener {
        //do something
    }
    
  • val定義変数はfinalに相当し、その後は参照を変更することはできず、varは初期化後も他の参照
  • を指すことができる.
  • findViewById(R.id.btn)as TextViewコントロールを見つけた後、asキーワードでTextViewタイプ
  • を変換する
  • リスニングを設定する方法はjavaと同じですが、OnClickListenerを渡すのではなく、直接カッコ{}もちろん標準的な使い方を見ることもできます.
    btn.setOnClickListener(View.OnClickListener { 
        //do something
    })
    

    各ButtonがリスニングをすべてOnClickListenerとして設定したくない場合は、ActivityにOnClickListenerを実装するには、継承されたクラスの後に追加し、OnClickListenerを書き込み、onClickメソッドから
    class AnimationActivity : BaseActivity(), View.OnClickListener {
    
        ...
        override fun onClick(v: View?) {
            val intent: Intent
            when(v?.id){
                R.id.id_animation_activity_view_animation ->{
                    intent = Intent(this, ViewAnimationActivity::class.java)
                    startActivity(intent)
                }
                R.id.id_animation_activity_property_animation ->{
                    intent = Intent(this, PropertyAnimationActivity::class.java)
                    startActivity(intent)
                }
            }
    
        }
    }
    

    注意深いあなたはすでに発見して、ここには多くの珍しい面白いものがあって、以下は一つ一つ説明します
    ブランチの使用
    Javaの使用条件はswitch(){}で使用されますが、Kotlinではwhenキーワードで使用されます
    when(v?.id){
        R.id.id_animation_activity_view_animation ->{
            // do something
        }
        R.id.id_animation_activity_property_animation ->{
            //do something
        }
    }
    

    明らかにwhen()カッコ内が判断のタイプで、ここではviewのidで、それぞれがこのように判断します
    R.id.id_animation_activity_view_animation ->{
        //do something
    }
    

    別のActivityの起動
    val intent: Intent
    intent = Intent(this, XXXActivity::class.java)
    startActivity(intent)
    

    なぜこのように使うのか、私はまだよく分かりません.また、○○のコントロールの傍受方法で別のActivityを起動すると、ここではrecyclerViewの傍受を使用しています.
    intent = Intent(this@MainActivity, XXXActivity::class.java)
    startActivity(intent)
    

    変数の宣言
    ローカル変数を宣言する場合、valは通常使用されますが、グローバル変数を宣言する場合、varは通常使用され、宣言時に空に初期化されます.たとえば、
    private var tv_target: TextView? = null
    

    TextViewオブジェクトを宣言し、空に初期化し、初期化しないとエラーが報告され、Activityで正常に使用されることを示します.
    tv_target = findViewById(R.id.id_view_animation_activity_tv_target) as TextView
    

    TextViewの表示値を変更する場合はsetText()ではなく、
    tv_target.setText("");
    

    属性値を設定することでsetText()メソッドが呼び出されます
    tv_target.text = "hello"
    

    后でsetXXX方法はすべてこのように使うので、しかし上のはやはり间违いを报告して、tv_のためですtargetはTevtViewと定義されていますか?エラーメッセージ:
    Smart cast to 'TextView' is impossible, because 'tv_target' is a mutable property that could have been changed by this time
    

    so正しい姿勢は
    tv_target?.text = "hello"
    

    エンティティークラスの定義
    Javaでは、属性を定義し、その属性を作成するgettetメソッドとsetterメソッドはKotlinでのみ必要です.
    class ListItem(
            var title: String,
            var description: String
    )
    

    これによりgetterメソッドとsetterメソッドが自動的に生成され、通常はこのように使用する必要はありません.
    var listItemA = ListItem("titleText", "descriptionText")
    listItemA.title = "HI Title"
    listItemA.description = "Hi Description"
    

    メソッドを定義し、パラメータのデフォルト値を設定します.
    例えばActivityでToastを定義する方法
    private fun toast(message: String, length: Int=Toast.LENGTH_LONG):Unit{
        Toast.makeText(this@MainActivity, message,length).show()
    }
    

    Unitは戻りタイプであり、Unitテーブルは戻り値がvoidであることを示すものに相当し、Unitを省略することができる.
    private fun toast(message: String, length: Int=Toast.LENGTH_LONG){
            Toast.makeText(this@MainActivity, message,length).show()
    }
    

    ここでlengthパラメータはToastというデフォルト値を指定する.LENGTH_LONG呼び出しはこうすべき
    toast("HI Android")
    // 
    toast("Hi Android",1000)
    

    RecyclerViewの使用
    Activityでは通常ArrayListタイプのグローバル変数を定義し、Adapterのパラメータとしてグローバル変数を宣言します.
    private var listItems: ArrayList? = null
    

    ここはArrayList?を選択します.
    次にAdapterを作成します.彼の構造方法は次のとおりです.
    class MyRecyclerViewAdapter(private val context: Context,
                                private val listItems: ArrayList?) 
        : RecyclerView.Adapter() {
    }
    

    構築方法におけるlistItemsのタイプもArrayList?,Activityでは、可変のグローバル変数を定義するときに初期化が空になるため、ここではこれに対応してlistItemsオブジェクトを初期化する
    listItems =  ArrayList()
    listItems?.add(ListItem("chapter1", "Android Framework"))
    listItems!!.add(ListItem("chapter2", "Android Developer tools"))
    listItems!!.add(ListItem("chapter3", "Custom View"))
    listItems!!.add(ListItem("chapter4", "listView Demo"))
    listItems!!.add(ListItem("chapter5", "Scroll Analysis"))
    listItems!!.add(ListItem("chapter6", "Draw"))
    listItems!!.add(ListItem("chapter7", "Animation Demo"))
    

    ここで知らないの?のと!!いったいどんな違いがあるのか.深く研究する必要があります.この時、このように使うべきだと知っておく必要があります.最後にこのように使います.
    val recyclerView = findViewById(R.id.id_main_recycler_view) as RecyclerView
    val recyclerViewAdapter = MyRecyclerViewAdapter(this,listItems)
    recyclerView.layoutManager = LinearLayoutManager(this)
    recyclerView.adapter = recyclerViewAdapter