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

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

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

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

Kotlin

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

Q&A

解決済

2回答

2624閲覧

ボタン情報の保存 Kotlin sharedPreferences

hbhvychgh

総合スコア13

Android Studio

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

Kotlin

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

0グッド

0クリップ

投稿2018/09/07 04:54

ボタンの状態をsharedPreferencesに保存して、起動時にそれを呼び出し、反映させるプログラムです。

Kotlin

1 2import android.content.Context 3import android.support.v7.app.AppCompatActivity 4import android.os.Bundle 5import android.view.View 6import kotlinx.android.synthetic.main.activity_login.* 7import kotlinx.android.synthetic.main.activity_registered.* 8 9class LoginActivity : AppCompatActivity() { 10 11 private val sharedPreferences = getSharedPreferences("button", Context.MODE_PRIVATE)**<-これは毎回やることになってbuttonがたくさんつくられるってことになりエラーになる?** 12 13 private val editor = sharedPreferences.edit() 14 15 override fun onCreate(savedInstanceState: Bundle?) { 16 super.onCreate(savedInstanceState) 17 setContentView(R.layout.activity_login) 18 19 ここに初回起動時かどうかを判断するプログラムを書いて、その場合はbuttontfにfalseを入れるようにする? 20 21 togglebutton.setChecked(buttontf**<-この指示の仕方がよくわかりません**) <-かけたとしても、初回起動時はbuttontfに何も入っていないためエラーになる? 22 23 fun prebutton(v:View){ 24 25 editor.putBoolean("buttontf",toggleButton.isChecked) 26 27 } 28}

色々わかりません、簡単な仕組みを理解するためのプログラムとしてどうするのがよいのでしょうか

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

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

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

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

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

guest

回答2

0

ベストアンサー

これは毎回やることになってbuttonがたくさんつくられるってことになりエラーになる?

SharedPreferencesではXMLファイルに情報が記録されます。getSharedPreferences()の第1引数に記述した文字列がXMLファイルの名前になります。この例で言えば、button.xmlというファイル名になります。初回起動でファイルが存在しないときは自動的に生成され、2回目以降の実行ではそのファイルが読み込まれますので、「実行する度にXMLファイルが作られる」ということはありません。

ただし、ご提示いただいたコードのように宣言して初期値を代入しようとするとエラーでアプリが落ちてしまうので、

kotlin

1 private lateinit var sharedPreferences: SharedPreferences 2 3 override fun onCreate(savedInstanceState: Bundle?) { 4 sharedPreferences = getSharedPreferences("button", Context.MODE_PRIVATE) 5 6 } 7

のように記述することになるでしょう。

ここに初回起動時かどうかを判断するプログラムを書いて

SharedPreferencesから値を取得するメソッドでは、「指定したキーが存在しないときの初期値」を指定することができます。

kotlin

1 val buttontf = sharedPreferences.getBoolean("togglebutton", false)

とすれば、togglebuttonというキーによるboolean値がbutton.xmlに存在しなければ(ファイルが新規作成されたときも同様)、変数buttontfにはfalseが返ります。ただ、booleanでは「初回起動かどうか」を判断するのは難しいですね。初回起動か判断する必要があれば、例えばintでアプリでは使用することのない値を初期値すれば判別可能でしょう。

まとめれば、だいたいこんな感じにすれば最低限の動作確認はできるのでは?

kotlin

1class MainActivity : AppCompatActivity() { 2 3 private lateinit var sharedPreferences: SharedPreferences 4 5 override fun onCreate(savedInstanceState: Bundle?) { 6 super.onCreate(savedInstanceState) 7 setContentView(R.layout.activity_login) 8 9 // button.xmlから情報を得る 10 sharedPreferences = getSharedPreferences("button", Context.MODE_PRIVATE) 11 // キーtogglebuttonからboolean値を得る 12 val buttontf = sharedPreferences.getBoolean("togglebutton", false) 13 14 togglebutton.setChecked(buttontf) 15 16 togglebutton.setOnCheckedChangeListener { _, isChecked -> 17 // トグルする度にキーbuttontfに現在値を書き込む 18 val editor = sharedPreferences.edit() 19 editor.putBoolean("buttontf", isChecked).apply() 20 } 21 } 22}

投稿2018/09/07 09:32

編集2018/09/07 11:44
keicha_hrs

総合スコア6768

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

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

0

値が入っていない場合はfalseを返したいのでしたら以下のようなコードにすればよいかと。

Kotlin

1togglebutton.setChecked(sharedPreferences.getBoolean("buttontf", false))

投稿2018/09/07 08:19

nakasho_dev

総合スコア2655

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問