Kotlinで地図アプリ（ゴミ拾いアプリ）。（13日目）


#今日やった事

・Activity間のデータ送受信
・Korlinで3秒で消えるダイアログを作成
・設定画面を作成
・Preferencesで設定を記録/読込


#Activity間のデータ送受信

参考サイト：

https://kotlin.akira-watson.com/android/activity-trans-data.html



```kotlin:MapsActivity.kt

const val EXTRA_MESSAGE = "com.example.(APP NAME).MESSAGE"
const val requestCode_setting = 1000;
....

    override fun onClick(view: View) {
        when (view.id) {
            R.id.main_set->    {
                val intent = Intent(applicationContext, SettingActivity::class.java)
                intent.putExtra(EXTRA_MESSAGE,"データ送信")
                startActivityForResult(intent,requestCode_setting )
            }
....

    override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) {
        super.onActivityResult(requestCode, resultCode, intent)

        if (resultCode == RESULT_OK && requestCode == requestCode_setting && intent != null) {
            val res = intent.extras?.getString(EXTRA_MESSAGE)?:""
            Toast.makeText(this, res, Toast.LENGTH_LONG).show()  //確認用
        }
    }
```

```kotlin:SettingActivity.kt

class SettingActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

....
        
        val btnBack :Button = findViewById(R.id.return_button)
        btnBack.setOnClickListener {

            val intent = Intent()
            intent.putExtra(EXTRA_MESSAGE, "データ受信") //確認用
            setResult(RESULT_OK, intent)

            finish()
        }
    }
}
```

実行結果：(GIF動画にしてみました)
![Intent.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503948/bbcc533c-4e3a-b588-4b3b-9e2e17616c5c.gif)


Activity間の送受信、完成。


その他、参考サイト：

https://qiita.com/kskso9/items/01c8bbb39355af9ec25e

https://nori4c.hatenadiary.org/entry/20110712/p1

https://buildersbox.corp-sansan.com/entry/2020/05/27/110000



startActivityForResultがDeprecatedになったようですが、とりあえず、今回はこのまま行きます。


#



#Korlinで3秒で消えるダイアログを作成 


何となくダイアログを表示後、時間経過で自動で閉じるダイアログを作ってみました。

```kotlin:(TimerDialog)
    val TimeCount: Long = 1000 * 3 // 3秒
    val dialog = AlertDialog.Builder(this)
        .setTitle("タイマーダイアログ")
        .setMessage("3秒後に自動で閉じるダイアログ")
        .setPositiveButton("終了") {
            dialog,
            which ->
                // TODO:終了が押された時の挙動
                Toast.makeText(this,"終了（ボタン）", Toast.LENGTH_LONG).show()
    }
    val alert = dialog.create()
    alert.show()
    val handler = Handler()
    val runnable = Runnable {
        if (alert.isShowing) {
            alert.dismiss()
            Toast.makeText(this,"終了（タイマー）", Toast.LENGTH_LONG).show()
        }
    }
    alert.setOnDismissListener { handler.removeCallbacks(runnable) }
    handler.postDelayed(runnable, TimeCount)


```


実行画面（GIF動画）

![Animation.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503948/95bb5cd9-f898-d4a9-2937-47ab7446ee73.gif)




参考サイト：

https://qiita.com/hokutonikukyu/items/ebbc0318c07035e04bf7

https://www.webdevqa.jp.net/ja/java/android-5%E7%A7%92%E5%BE%8C%E3%81%AB%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E3%82%92%E9%96%89%E3%81%98%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F/1071717821/

https://dev.classmethod.jp/articles/android-tas/

https://gupuru.hatenablog.jp/entry/2014/04/21/194350

https://programming-jissen.com/how-to-get-event-to-close-dialog/

https://re-engines.com/2019/12/19/%E3%80%90java%E3%80%91handler%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%81%9F/


# 設定画面を作成



```xml:activity_setting.xml
        <!-- タイトル -->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#fff"
            android:gravity="center|bottom"
            android:launchMode="standard"
            android:orientation="horizontal"
            android:layout_weight="0.5">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="位置情報／確認ダイアログの有無"
                android:textColor="#a0522d"
                android:textAlignment="center"
                android:textSize="19sp" />
        </LinearLayout>

        <!-- 空白スペース -->
        <LinearLayout
            android:background="#fff"
            android:launchMode="standard"
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="10sp"
            android:layout_weight="0.5">
        </LinearLayout>
        <!-- ラジオボタン -->
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#fff"
            android:launchMode="singleTop"
            android:orientation="horizontal">
            <RadioGroup
                android:layout_height="wrap_content"
                android:id="@+id/radioGroupPosition"
                android:layout_width="wrap_content"
                android:orientation="horizontal">
                <RadioButton
                    android:layout_width="100sp"
                    android:id="@+id/radioPosition0"
                    android:layout_height="wrap_content"
                    android:text="あり"
                    android:textSize="19sp">
                </RadioButton>
                <RadioButton
                    android:layout_width="100sp"
                    android:id="@+id/radioPosition1"
                    android:layout_height="wrap_content"
                    android:text="なし"
                    android:textSize="19sp">
                </RadioButton>
                <RadioButton
                    android:layout_width="120sp"
                    android:id="@+id/radioPosition2"
                    android:layout_height="wrap_content"
                    android:text="タイマー"
                    android:textSize="19sp">
                </RadioButton>
            </RadioGroup>
        </LinearLayout>
```

実行画面：
![イメージ7496.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503948/328aca88-4a49-62f5-ef7e-1dcb28b32f33.jpeg)


ラジオボタンチェック

```kotlin:SettingActivity.kt
        val radioGroup = findViewById<RadioGroup>(R.id.radioGroupPosition)
        when(settingData){
            "0"     -> radioGroup.check(R.id.radioPosition0)
            "1"     -> radioGroup.check(R.id.radioPosition1)
            "2"     -> radioGroup.check(R.id.radioPosition2)
            else    -> radioGroup.check(R.id.radioPosition0)
        }
```


ラジオボタンチェック状態取得

```kotlin:SettingActivity.kt
        // ラジオボタン
        val radioGroup = findViewById<RadioGroup>(R.id.radioGroupPosition)
        val id = radioGroup.checkedRadioButtonId
        when(id){
            R.id.radioPosition0 -> SetButton="0"
            R.id.radioPosition1 -> SetButton="1"
            R.id.radioPosition2 -> SetButton="2"
            else                -> SetButton="0"
        }
```


#Preferencesで設定を記録/読込

設定ファイル保存

```kotlin:MapsActivity.kt
        getSharedPreferences(setFileName, Context.MODE_PRIVATE).edit().apply {
            putString(setMainName,data)
            commit()
        }
```


設定ファイル読込

```kotlin:MapsActivity.kt
        val pref = getSharedPreferences(setFileName, Context.MODE_PRIVATE)
        setMainData = pref.getString(setMainName, "") as String
```


#まとめ

設定画面を作成して、画面推移し、Activity間の送受信。
更に、設定データの記録と反映まで作成。

これで、思いついたアイデアを拡張しやすくなりました。

次は、WEBで地図表示する際に、MySQLに登録された位置情報すべて表示していたので、日付毎に表示するなどのカスタムをやる予定です。