どうも!LSSです!
AndroidStudio+Kotlinでスマホアプリ開発の勉強中です。
無意味にClassを作ってみる、バーチャルブログシリーズ「その7」です!
さて、前回は「バーチャルブロガーがやっと記事を書きます!w」と言いながら結局書く前に終わってしまいましたね^^;;;
今回こそ、確認画面のほうもちょっと手直しが必要な状態ですが、さくっと行きます!
MainActivity.ktの編集
えっと、各ブロガーが挨拶したり、読者登録したり、toString()で確認表示したりしていたら、
↑こんな風に画面がいっぱいいっぱいになった状態でした。
ストーリー的に続けたいので、どうしようかなーと考えた結果、
「画面タップで次の展開の文が出る」ようにする事にしました^^
package jp.littlestrangesoftware.a20200111_class_test
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
var story_text= mutableListOf<String>()
var story_i = 0
var blogtarou = Blogger("ブログ太郎",1234)
var sslkun = Blogger("SSL君")
var urokogumo = Blogger("うろこ雲")
var pokeko = Blogger("ポケコ")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
story_text.add ( blogtarou.hello() +"\n"+
sslkun.hello()+"\n"+
urokogumo.hello()+"\n"+
pokeko.hello()+"\n"+
blogtarou.touroku(sslkun)+"\n"+
sslkun.touroku(urokogumo)+"\n"+
urokogumo.touroku(pokeko)+"\n"+
pokeko.touroku(blogtarou)+"\n"+
"\n"+blogtarou.toString()+"\n"+
"\n"+sslkun.toString()+"\n" +
"\n"+urokogumo.toString()+"\n" +
"\n"+pokeko.toString()+"\n"
)
tv0.text=story_text[0]
pokeko.blog_genre="ゲーム"
pokeko.blog_title="マイクラ三昧!"
pokeko.post("ついに海底神殿発見!","スポンジいっぱい取れるかなぁ。\n次回、いよいよ攻め込みます!")
pokeko.post("エルダーガーディアン2体撃破!あと1体は…","2体目まではあっさり狩った。\nが、3体目が見つからない~!")
story_text.add("うろこ雲の「お知らせ」を表示。\n" +
"${urokogumo.notice_text}\n"
)
}
fun tv0clk(v: View){
story_i++
if (story_i > story_text.lastIndex){
story_i=0
}
tv0.text=story_text[story_i]
}
}
↑ストーリー進行に関わる部分を赤文字にしてみました。
まず、画面出力用の文字列をstory_textというString型を要素とする配列変数に格納するようにしました。
で、story_text.addで文字列を引数として渡すと、
一番最初にaddした文字列が、story_text[0]
次にaddした文字列が、story_text[1]
に入るという事になります。
実際、LSSはここでつまづいたんですが、いきなり、
story_text[0]="画面出力用の文字列"
とすると、コンパイルは通るけどスマホ実機側でアプリが最初からエラーで起動しないという厄介な問題になりました^^;;;;。Class以前の問題ですね^^;。
最初は空配列なので[0]でも0番目の要素が存在せず、まずaddで作らないとダメ!という事かと理解しました。
ポケコ、ブログのジャンルとタイトルを設定する
引き続き、↑に書いたMainActivity.kt内の記載についての話になります。
pokeko.blog_genre="ゲーム"
pokeko.blog_title="マイクラ三昧!"
ブログジャンルとブログタイトルを最初に設定したのは、ポケコでした!
ゲームブログで、タイトルは「マイクラ三昧!」というそうです。
方向性が決まり、ノってきたのか、
pokeko.post("ついに海底神殿発見!","スポンジいっぱい取れるかなぁ。\n次回、いよいよ攻め込みます!")
pokeko.post("エルダーガーディアン2体撃破!あと1体は…","2体目まではあっさり狩った。\nが、3体目が見つからない~!")
連続で記事投稿されていますねw
ついに海底神殿発見!
スポンジいっぱい取れるかなぁ。 次回、いよいよ攻め込みます! |
エルダーガーディアン2体撃破!あと1体は…
2体目まではあっさり狩った。 が、3体目が見つからない~! |
という2記事を投稿されたようです^^
読者である、うろこ雲の「お知らせ」の内容を確認
前回、Bloggerクラスにpostメソッド(記事投稿)を追加した時に、
「読者全員の『お知らせ』にブログ名と記事タイトルを追記」するようにしました。
なので、ポケコさんを読者登録した、うろこ雲さんの「お知らせ」の内容を覗かせてもらって、ちゃんと通知されてるか確認してみましょう。
というのが、
story_text.add("うろこ雲の「お知らせ」を表示。\n" +
"${urokogumo.notice_text}\n"
)
↑この部分になります。
画面タップで次の展開の文章に切り替える、には
fun tv0clk(v: View){
story_i++
if (story_i > story_text.lastIndex){
story_i=0
}
tv0.text=story_text[story_i]
}
↑こんなコードを書きました。
文章を表示しているTextView「tv0」の「onClick」に、この「tv0clk」という関数をxml側で割り当てています。
で、「今、画面に表示されているのはどのシーン(story_textのいくつめの要素)か」を管理するInt型(整数型)の変数「story_i」を
story_i++
で、まず+1しています。
次の if は
「シーンが最後まで進んだら(story_iがstory_textの要素数を超えたら)、話を最初に戻す(story_iを0にする)」
という処理を行っています。
そして、
tv0.text=story_text[story_i]
で実際に該当する文章でtv0(と名付けたTextView)を書き換える、という処理の流れですね。
いよいよ実行!
アプリが起動して最初に出るのは、いつもの
この画面。で、ここで画面をタッチすると…
ポケコが2回連続投稿した記事の「ブログタイトル」と「記事タイトル」が、読者であるうろこ雲の「お知らせ」に届いていますね!^^
※はてなブログの「お知らせ」は1ブログ毎に最新記事しか同時に載りませんがw
2回に渡り、新たなクラスの作成と、それのBloggerクラスのプロパティへの組み込み、それを操作するメソッドなんかを作ってみました。
ついでに、配列のおさらいもやったような感じですねw
バーチャルブログ内では、ポケコがはりきって2記事書きましたが、その内容を確認するメソッドや、記事投稿日時の確認部分はまた、別の話って事で。
てなとこで、今回はこのへんで!
次回もまた、よろしくお願いします^^