質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

button

HTMLで用いる<button>タグです。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

0回答

714閲覧

ボタンを増やした数に合わせて遷移先の画面も増やさないといけない?

default-nuko

総合スコア3

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

button

HTMLで用いる<button>タグです。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2020/10/26 05:00

AndroidStudioで時間割表を作成したいと思い、開発を始めました。
時間割表の画像を貼り付け、その上にボタンを配置しています。ボタンを押すと画面遷移して科目登録の画面へ行きます。
科目登録の画面では、科目名、受講部屋、担当教員を入力します。登録ボタンを押すと、時間割表の画面へ遷移します。
登録ボタンを押して時間割表の画面へ遷移した場合、入力された内容は保存されます。科目登録の画面に左上にある✖ボタンを押した時は内容を保存せずに時間割表の画面へ遷移します。時間割表のボタンには科目登録の「科目名」の内容を反映させてあります。

画像では、2つしかボタンが配置されていませんが、各曜日に4つずつの合計20個のボタンを配置する予定です。

1つボタンを作って試した際はうまくいったのですが、2つ目のボタン(buttonと書かれたボタン)を配置して試したところ、1つ目のボタンの内容が変更されてしまいました。このまま続けると、20個配置してもすべて1つ目のボタンが変更されてしまうと思い、今回こちらの掲示板に質問することに決めました。
まずは、現状を知ってもらうために各コードとレイアウトの画像を貼っておきます。
----------------メイン画面(時間割表の画面)の処理------------------------
package com.example.timeschedule

import android.app.Activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

companion object{ const val REQUEST_CODE = 1000//REQUEST_CODEの値はいくつでもよい。 // onActivityResult()に戻ってきたときに、どのActivityから戻ってきたのかを判別する。 // 今回のように遷移先が1つしかない場合、値は何でもよい。 } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) mon_12button.setOnClickListener { val intent = Intent(this, addSubject::class.java) startActivityForResult(intent, REQUEST_CODE) } mon_12button2.setOnClickListener { intent = Intent(this,addSubject::class.java) startActivityForResult(intent, REQUEST_CODE) } } override fun onStart() { super.onStart() val lesson = LessonData(this)//mainで読み込めばアプリを閉じて、再び開いても保存されたまま? val name = lesson.name mon_12button.text = name } //結果を受け取るメソッド override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if(requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK){ //RESURT_OKで帰ってきたとき、ボタンのテキストを更新 mon_12button.text = data?.getStringExtra("TEXT_KEY") } }

}

----------------科目登録の画面側の処理----------------------------------
package com.example.timeschedule

import android.app.Activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.core.content.edit
import androidx.preference.PreferenceManager
import kotlinx.android.synthetic.main.activity_add_subject.*
import java.io.Serializable

class addSubject : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_add_subject) backButton.setOnClickListener { finish() } addButton.setOnClickListener { val intent = Intent() intent.putExtra("TEXT_KEY",subjectName.text.toString())//戻す情報をintentにセット setResult(Activity.RESULT_OK,intent)//結果のコードとibtentをセット val lesson = LessonData(this)//登録ボタンを押した際、内容をLessonDataに書き込む lesson.name = subjectName.text.toString() lesson.teacher = responsibleTeacher.text.toString() lesson.room = lectureRoom.text.toString() finish() } } override fun onStart() { super.onStart() val lesson = LessonData(this)//前回保存したデータを読み込む val name = lesson.name val teacher = lesson.teacher val room = lesson.room subjectName.setText(name) lectureRoom.setText(room) responsibleTeacher.setText(teacher) }

}

----------------科目登録の画面用のデータセット--------------------------
package com.example.timeschedule

import android.content.Context
import androidx.preference.PreferenceManager

class LessonData(context: Context) {
private val prefs = PreferenceManager.getDefaultSharedPreferences(context)

var name: String?//科目名 get() = prefs.getString("NAME", null) set(value) = prefs.edit().putString("NAME", value).apply() var teacher: String?//教師名 get() = prefs.getString("TEACHER", null) set(value) = prefs.edit().putString("TEACHER", value).apply() var room: String?//部屋番号 get() = prefs.getString("ROOM", null) set(value) = prefs.edit().putString("ROOM", value).apply()

}


イメージ説明
//時間割表の画面
イメージ説明
//科目登録の画面

最終目標は各ボタンを押して科目登録の画面へ遷移し、登録ボタンを押した後押したボタンの内容が変更されるようにすることです。
科目登録の画面は1つで行っていますが,各ボタン用に科目登録の画面やデータセットを追加していかなければいけないのでしょうか?

解決方法が全く分からないので、解決方法や修正箇所,追加するプログラム等ありましたら、教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keicha_hrs

2020/10/30 13:45

こちらの質問もコードは```で囲ってください。
keicha_hrs

2020/10/30 13:56

ていうか、タイトルが異なる以外は質問内容が同一ですね。同じ質問の二重投稿は推奨されていません。タイトルの通り遷移先の画面数についてのみ焦点を当てた質問としたければ、そのように質問を改修してください。そうでなければ、誤って同一質問を複数投稿したものとして運営に削除を依頼してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問