AndroidStudioで時間割表を作成したいと思い、開発を始めました。
時間割表の画像を貼り付け、その上にボタンを配置しています。ボタンを押すと画面遷移して科目登録の画面へ行きます。
科目登録の画面では、科目名、受講部屋、担当教員を入力します。登録ボタンを押すと、時間割表の画面へ遷移します。
登録ボタンを押して時間割表の画面へ遷移した場合、入力された内容は保存されます。科目登録の画面に左上にある✖ボタンを押した時は内容を保存せずに時間割表の画面へ遷移します。時間割表のボタンには科目登録の「科目名」の内容を反映させてあります。
画像では、2つしかボタンが配置されていませんが、各曜日に4つずつの合計20個のボタンを配置する予定です。
1つボタンを作って試した際はうまくいったのですが、2つ目のボタン(buttonと書かれたボタン)を配置して試したところ、1つ目のボタンの内容が変更されてしまいました。このまま続けると、20個配置してもすべて1つ目のボタンが変更されてしまうと思い、今回こちらの掲示板に質問することに決めました。
まずは、現状を知ってもらうために各コードとレイアウトの画像を貼っておきます。
----------------メイン画面(時間割表の画面)の処理------------------------
Kotlin
1 2package com.example.timeschedule 3 4import android.app.Activity 5import android.content.Intent 6import androidx.appcompat.app.AppCompatActivity 7import android.os.Bundle 8import android.view.View 9import kotlinx.android.synthetic.main.activity_main.* 10 11class MainActivity : AppCompatActivity() { 12 13 companion object{ 14 const val REQUEST_CODE = 1000//REQUEST_CODEの値はいくつでもよい。 15 // onActivityResult()に戻ってきたときに、どのActivityから戻ってきたのかを判別する。 16 // 今回のように遷移先が1つしかない場合、値は何でもよい。 17 } 18 19 override fun onCreate(savedInstanceState: Bundle?) { 20 21 22 super.onCreate(savedInstanceState) 23 setContentView(R.layout.activity_main) 24 25 mon_12button.setOnClickListener { 26 val intent = Intent(this, addSubject::class.java) 27 startActivityForResult(intent, REQUEST_CODE) 28 29 } 30 mon_12button2.setOnClickListener { 31 intent = Intent(this,addSubject::class.java) 32 startActivityForResult(intent, REQUEST_CODE) 33 } 34 35 } 36 37 override fun onStart() { 38 super.onStart() 39 val lesson = LessonData(this)//mainで読み込めばアプリを閉じて、再び開いても保存されたまま? 40 val name = lesson.name 41 mon_12button.text = name 42 } 43 44 //結果を受け取るメソッド 45 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 46 super.onActivityResult(requestCode, resultCode, data) 47 48 if(requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK){ 49 //RESURT_OKで帰ってきたとき、ボタンのテキストを更新 50 mon_12button.text = data?.getStringExtra("TEXT_KEY") 51 } 52 } 53}
----------------科目登録の画面側の処理----------------------------------
Kotlin
1 2package com.example.timeschedule 3 4import android.app.Activity 5import android.content.Intent 6import androidx.appcompat.app.AppCompatActivity 7import android.os.Bundle 8import androidx.core.content.edit 9import androidx.preference.PreferenceManager 10import kotlinx.android.synthetic.main.activity_add_subject.* 11import java.io.Serializable 12 13 14class addSubject : AppCompatActivity() { 15 16 override fun onCreate(savedInstanceState: Bundle?) { 17 super.onCreate(savedInstanceState) 18 19 setContentView(R.layout.activity_add_subject) 20 backButton.setOnClickListener { 21 finish() 22 } 23 24 addButton.setOnClickListener { 25 val intent = Intent() 26 intent.putExtra("TEXT_KEY",subjectName.text.toString())//戻す情報をintentにセット 27 setResult(Activity.RESULT_OK,intent)//結果のコードとibtentをセット 28 29 val lesson = LessonData(this)//登録ボタンを押した際、内容をLessonDataに書き込む 30 lesson.name = subjectName.text.toString() 31 lesson.teacher = responsibleTeacher.text.toString() 32 lesson.room = lectureRoom.text.toString() 33 finish() 34 35 } 36 37 } 38 39 override fun onStart() { 40 super.onStart() 41 val lesson = LessonData(this)//前回保存したデータを読み込む 42 val name = lesson.name 43 val teacher = lesson.teacher 44 val room = lesson.room 45 subjectName.setText(name) 46 lectureRoom.setText(room) 47 responsibleTeacher.setText(teacher) 48 49 } 50 51}
----------------科目登録の画面用のデータセット--------------------------
Kotlin
1package com.example.timeschedule 2 3import android.content.Context 4import androidx.preference.PreferenceManager 5 6class LessonData(context: Context) { 7 private val prefs = PreferenceManager.getDefaultSharedPreferences(context) 8 9 var name: String?//科目名 10 get() = prefs.getString("NAME", null) 11 set(value) = prefs.edit().putString("NAME", value).apply() 12 13 var teacher: String?//教師名 14 get() = prefs.getString("TEACHER", null) 15 set(value) = prefs.edit().putString("TEACHER", value).apply() 16 17 var room: String?//部屋番号 18 get() = prefs.getString("ROOM", null) 19 set(value) = prefs.edit().putString("ROOM", value).apply() 20} 21
最終目標は各ボタンを押して科目登録の画面へ遷移し、登録ボタンを押した後押したボタンの内容が変更されるようにすることです。
科目登録の画面は1つで行っていますが,各ボタン用に科目登録の画面やデータセットを追加していかなければいけないのでしょうか?
解決方法が全く分からないので、解決方法や修正箇所,追加するプログラム等ありましたら、教えていただきたいです。
回答1件
あなたの回答
tips
プレビュー