回答編集履歴

8

コード修正

2023/11/03 18:43

投稿

jimbe
jimbe

スコア12696

test CHANGED
@@ -23,13 +23,13 @@
23
23
 
24
24
  class HomeFragment : Fragment() {
25
25
  companion object {
26
- //要らないものはさっさと消しておく. パラメータも消したいが互換性のため.
26
+ //要らないものは消しておく. パラメータ互換性のため.
27
27
  fun newInstance(param1: String, param2: String) = HomeFragment()
28
+
29
+ private const val PREFERENCE = "preference_file" //リソースから取る程のものでもなさそう
30
+ private const val PREF_STATION1_NAME = "Station1Name"
31
+ private const val CLEAR_VALUE = "NoData"
28
32
  }
29
-
30
- private val PREFERENCE = "preference_file" //リソースから取る程のもの?
31
- private val PREF_STATION1_NAME = "Station1Name"
32
- private val CLEAR_VALUE = "NoData"
33
33
 
34
34
  private var _binding: FragmentHomeBinding? = null
35
35
  private val binding get() = _binding!!
@@ -51,7 +51,7 @@
51
51
 
52
52
  //検索ボタンの処理
53
53
  binding.searchbutton.setOnClickListener {
54
- val searchstation: String = binding.stationsearch.getText().toString()
54
+ val searchstation = binding.stationsearch.getText().toString()
55
55
  if(searchstation != ""){
56
56
  //保存
57
57
  sharedPref.edit().putString(PREF_STATION1_NAME, searchstation).apply() //Editor は随時取り出し

7

修正

2023/11/03 18:31

投稿

jimbe
jimbe

スコア12696

test CHANGED
@@ -1,9 +1,8 @@
1
- ~~SharedPreferences.Editor を commit() してみては。~~
2
-
3
- そもそも初期表示時に SharedPreference 取り込めてないのではないでしょうか。
1
+ そもそも SharedPreference オブジェクト自体を得てないのではないでしょうか。
4
2
 
5
3
  >val sharedPref = getActivity()?.getSharedPreferences(
6
4
  Fragment オブジェクトの生成時はまだ Activity とリンクしていませんので、 getActivity() は null を返します。
5
+ sharedPref が null なら editor も null になり、 putString も apply も実行されません。
7
6
 
8
7
  >・ほかのfragmentに移動して戻ってきた後
9
8
  >・バックグラウンドに行った後

6

追加

2023/11/03 18:17

投稿

jimbe
jimbe

スコア12696

test CHANGED
@@ -1,6 +1,6 @@
1
1
  ~~SharedPreferences.Editor を commit() してみては。~~
2
2
 
3
- そもそも初期表示時に SharedPreference から取り込めてないすね
3
+ そもそも初期表示時に SharedPreference から取り込めてないはないでしょうか
4
4
 
5
5
  >val sharedPref = getActivity()?.getSharedPreferences(
6
6
  Fragment オブジェクトの生成時はまだ Activity とリンクしていませんので、 getActivity() は null を返します。
@@ -10,7 +10,10 @@
10
10
  >・実行しているエミュレータをスリープにしてもう一度起動した後
11
11
  は、 SharedPreference に保存・再生されたのでは無く、 Fragment 自体が残っていて、各 EditText や TextView の値が Fragment によって保存・再生されたのでは無いでしょうか。
12
12
 
13
+ **※こちらの環境により、パッケージを変えています**
13
14
  ```kotlin
15
+ package com.teratail.q_rdjw8xeirai92w
16
+
14
17
  import android.content.Context
15
18
  import android.os.Bundle
16
19
  import android.view.LayoutInflater

5

追加

2023/11/03 18:14

投稿

jimbe
jimbe

スコア12696

test CHANGED
@@ -1,7 +1,9 @@
1
1
  ~~SharedPreferences.Editor を commit() してみては。~~
2
2
 
3
3
  そもそも初期表示時に SharedPreference から取り込めてないんですね。
4
+
5
+ >val sharedPref = getActivity()?.getSharedPreferences(
4
- Fragment の生成時はまだ Activity とリンクしていませんので、 getActivity() は null を返します。
6
+ Fragment オブジェクトの生成時はまだ Activity とリンクしていませんので、 getActivity() は null を返します。
5
7
 
6
8
  >・ほかのfragmentに移動して戻ってきた後
7
9
  >・バックグラウンドに行った後

4

追加

2023/11/03 18:05

投稿

jimbe
jimbe

スコア12696

test CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  そもそも初期表示時に SharedPreference から取り込めてないんですね。
4
4
  Fragment の生成時はまだ Activity とリンクしていませんので、 getActivity() は null を返します。
5
+
6
+ >・ほかのfragmentに移動して戻ってきた後
7
+ >・バックグラウンドに行った後
8
+ >・実行しているエミュレータをスリープにしてもう一度起動した後
9
+ は、 SharedPreference に保存・再生されたのでは無く、 Fragment 自体が残っていて、各 EditText や TextView の値が Fragment によって保存・再生されたのでは無いでしょうか。
5
10
 
6
11
  ```kotlin
7
12
  import android.content.Context

3

追加

2023/11/03 17:53

投稿

jimbe
jimbe

スコア12696

test CHANGED
@@ -1,6 +1,7 @@
1
1
  ~~SharedPreferences.Editor を commit() してみては。~~
2
2
 
3
- そもそも初期表示時に SharedPreference から取り込んでないんですね。
3
+ そもそも初期表示時に SharedPreference から取り込めてないんですね。
4
+ Fragment の生成時はまだ Activity とリンクしていませんので、 getActivity() は null を返します。
4
5
 
5
6
  ```kotlin
6
7
  import android.content.Context

2

コード追加

2023/11/03 17:49

投稿

jimbe
jimbe

スコア12696

test CHANGED
@@ -1,3 +1,65 @@
1
1
  ~~SharedPreferences.Editor を commit() してみては。~~
2
2
 
3
3
  そもそも初期表示時に SharedPreference から取り込んでないんですね。
4
+
5
+ ```kotlin
6
+ import android.content.Context
7
+ import android.os.Bundle
8
+ import android.view.LayoutInflater
9
+ import android.view.View
10
+ import android.view.ViewGroup
11
+ import androidx.fragment.app.Fragment
12
+ import com.teratail.q_rdjw8xeirai92w.databinding.FragmentHomeBinding
13
+
14
+ class HomeFragment : Fragment() {
15
+ companion object {
16
+ //要らないものはさっさと消しておく. パラメータも消したいが互換性のため.
17
+ fun newInstance(param1: String, param2: String) = HomeFragment()
18
+ }
19
+
20
+ private val PREFERENCE = "preference_file" //リソースから取る程のもの?
21
+ private val PREF_STATION1_NAME = "Station1Name"
22
+ private val CLEAR_VALUE = "NoData"
23
+
24
+ private var _binding: FragmentHomeBinding? = null
25
+ private val binding get() = _binding!!
26
+
27
+ //onCreateView は生成のみ
28
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
29
+ _binding = FragmentHomeBinding.inflate(layoutInflater, container, false)
30
+ return binding.root
31
+ }
32
+
33
+ //それぞれの処理はこちらに
34
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
35
+ super.onViewCreated(view, savedInstanceState)
36
+
37
+ val sharedPref = requireActivity().getSharedPreferences(PREFERENCE, Context.MODE_PRIVATE)
38
+
39
+ //最期の設定値を取り込み(無ければ "NoData")
40
+ binding.station1.text = sharedPref.getString(PREF_STATION1_NAME, CLEAR_VALUE);
41
+
42
+ //検索ボタンの処理
43
+ binding.searchbutton.setOnClickListener {
44
+ val searchstation: String = binding.stationsearch.getText().toString()
45
+ if(searchstation != ""){
46
+ //保存
47
+ sharedPref.edit().putString(PREF_STATION1_NAME, searchstation).apply() //Editor は随時取り出し
48
+ binding.station1.text = searchstation
49
+ }
50
+ }
51
+
52
+ //削除ボタンの処理
53
+ binding.station1del.setOnClickListener {
54
+ //クリア
55
+ sharedPref.edit().remove(PREF_STATION1_NAME).apply()
56
+ binding.station1.text = CLEAR_VALUE
57
+ }
58
+ }
59
+
60
+ override fun onDestroyView() {
61
+ _binding = null
62
+ super.onDestroyView()
63
+ }
64
+ }
65
+ ```

1

変更

2023/11/03 17:32

投稿

jimbe
jimbe

スコア12696

test CHANGED
@@ -1 +1,3 @@
1
- SharedPreferences.Editor を commit() してみては。
1
+ ~~SharedPreferences.Editor を commit() してみては。~~
2
+
3
+ そもそも初期表示時に SharedPreference から取り込んでないんですね。