Little Strange Software

スマホアプリの開発を行う LittleStrangeSoftware のブログです。

【実用性皆無!】学習のために無意味にClassを作ってみるテスト その7【誰得?】「バーチャルブロガーやっと記事を書く。の巻(後編)」

 どうも!LSSです!

 

 AndroidStudio+Kotlinでスマホアプリ開発の勉強中です。

 

 無意味にClassを作ってみる、バーチャルブログシリーズ「その7」です!

 

 

 さて、前回は「バーチャルブロガーがやっと記事を書きます!w」と言いながら結局書く前に終わってしまいましたね^^;;;

 

 今回こそ、確認画面のほうもちょっと手直しが必要な状態ですが、さくっと行きます!

 

 

MainActivity.ktの編集

 えっと、各ブロガーが挨拶したり、読者登録したり、toString()で確認表示したりしていたら、

f:id:little_strange:20200118230238p:plain

↑こんな風に画面がいっぱいいっぱいになった状態でした。

 

 ストーリー的に続けたいので、どうしようかなーと考えた結果、

「画面タップで次の展開の文が出る」ようにする事にしました^^

 

 

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)を書き換える、という処理の流れですね。

 

 

いよいよ実行!

 アプリが起動して最初に出るのは、いつもの

f:id:little_strange:20200122214124p:plain

 

この画面。で、ここで画面をタッチすると…

 

f:id:little_strange:20200122214207p:plain

 

 ポケコが2回連続投稿した記事の「ブログタイトル」「記事タイトル」が、読者であるうろこ雲「お知らせ」に届いていますね!^^

はてなブログの「お知らせ」は1ブログ毎に最新記事しか同時に載りませんがw

 

 

 

 

 2回に渡り、新たなクラスの作成と、それのBloggerクラスのプロパティへの組み込みそれを操作するメソッドなんかを作ってみました。

 ついでに、配列のおさらいもやったような感じですねw

 

 バーチャルブログ内では、ポケコがはりきって2記事書きましたが、その内容を確認するメソッドや、記事投稿日時の確認部分はまた、別の話って事で。

 

 

 

てなとこで、今回はこのへんで!

 次回もまた、よろしくお願いします^^