Android Studioでボタンを押すアプリを作った(そしてハマった)
Android StudioでAndroidアプリを作ろうとしています。全くの初学者なので学習法を探すところから始まります。いろいろ調べてみると、ブログの記事は数年前のものが多く、よく聞くドットインストールも6年くらい前のコンテンツでした。C言語など、枯れた技術なら問題ないですがAndroidのアプリ開発で使うKotlinは最近の言語で年々アップデートされています。数年前に推奨されていたやり方(例えば、FindviewbyidでViewを見つけて、操作するなど)は今や非推奨となり、他のやり方(ViewBindingを使う)が推奨される世界です。数年前の記事など当てにならず、教師役のブログを探すのに手間取りました。ついに見つけたのがこのブログ:nyan のアプリ開発 です。しばらくはこの記事を参考にアプリを作り、ここで紹介していきます。
ボタンを作る
今回はボタンを作りました。
こんな感じで、押したらPushedとNot pushedが入れ替わるものです(ブログの記事に習って書きましたが、カウンターの方が良かったですね)
カウンターに変更
カウンターに変更したものがこちら。
ハマったところ
もちろん今回もハマりました。症状は、ボタンを押しても画面の表示が変化しない、です。下に今回ハマったソースと正しいソースを載せます。どこが違うかわかるでしょうか。
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(R.layout.activity_main)
// Button切り替え用のフラグ
var flag = false
binding.button.setOnClickListener {
if (flag) {
// flagがtrueの時
binding.textview.text = "hello)"
flag = false
} else {
// flagがfalseの時
binding.textview.text = "world)"
flag = true
}
}
}
}
こちらが正しいコードです。
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
var flag = false
binding.button.setOnClickListener{
if ( flag ){
binding.textview.text = "Pushed"
flag = false
} else {
binding.textview.text = "not pushed"
flag = true
}
}
}
答え合わせ
正:setContentView(binding.root)
誤:setContentView(R.layout.activity_main)
レイアウトファイルをそのまま表示しているのでは、Bindingを用いて部品にアクセスして変更しても反映できない、ということでしょう。
今回のコード
カウンターに変更したコードを載せておきます。
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
var counter = 0
setContentView(binding.root)
binding.button.setOnClickListener{
binding.textview.text = counter.toString()
counter++
}
}
この記事が気に入ったらサポートをしてみませんか?