目次
概要
アプリの実装する上で基本中の基本となるボタンをタップした時の処理の実装方法を紹介していく。
とても単純なので是非、習得して欲しい。
以下のサンプルコードはボタンをタップしたら背景色を変えるというものだ。
ソースコード
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.Test"
tools:targetApi="31">
<activity android:name=".ButtonActionActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:exported="false">
</activity>
</application>
</manifest>
ButtonActionActivity.kt
package com.seeking_star.test
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.MenuItem
import com.seeking_star.test.Enumration.MagicType
import com.seeking_star.test.ui.main.MainFragment
import com.seeking_star.test.ButtonAction.ButtonActionFragment
class ButtonActionActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_button_action)
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.container, ButtonActionFragment.newInstance())
.commitNow()
}
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
var returnVal = true
when(item.itemId) {
android.R.id.home -> {
finish()
Log.d("itemId", "android.R.id.home")
}
else -> {
returnVal = super.onOptionsItemSelected(item)
Log.d("else", returnVal.toString())
}
}
return returnVal
}
}
activity_button_action.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ButtonActionActivity" />
ButtonActionFragment.kt
package com.seeking_star.test.ButtonAction
import android.graphics.Color
import androidx.lifecycle.ViewModelProvider
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import com.seeking_star.test.R
class ButtonActionFragment : Fragment() {
companion object {
fun newInstance() = ButtonActionFragment()
}
private lateinit var viewModel: ButtonActionViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProvider(this).get(ButtonActionViewModel::class.java)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val view = inflater.inflate(R.layout.fragment_button_action, container, false)
val button = view.findViewById<Button>(R.id.testButton)
button.setOnClickListener {
view.setBackgroundColor(Color.CYAN)
}
return view
}
}
fragment_button_action.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/sub"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ButtonAction.ButtonActionFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<Button
android:id="@+id/testButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ボタンを押してみてね" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
ButtonActionViewModel.kt
package com.seeking_star.test.ButtonAction
import androidx.lifecycle.ViewModel
class ButtonActionViewModel: ViewModel() {
// TODO: Implement the ViewModel
}
デモ動画
詳細
今回の肝となる箇所はここの部分だ。
val button = view.findViewById<Button>(R.id.testButton)
button.setOnClickListener {
view.setBackgroundColor(Color.CYAN)
}
ボタンのオブジェクトを取得したら、setOnClickListenerメソッドを実装する。
この中括弧「{」「}」に書かれている内容がボタンをタップした時のコードになる。
今回はsetBackgroundColorメソッドによって背景色をCYANにしている。
タップ処理を実装しただけだが、今後はタップしたら通信を行ったり、画面遷移を行ったりと実装していく幅が増えるだろう。
参考ページ
- 「」
- 「」