質問編集履歴

2

EditTextのコードを追記しました

2023/03/08 05:40

投稿

watashichanchan
watashichanchan

スコア8

test CHANGED
File without changes
test CHANGED
@@ -170,6 +170,23 @@
170
170
  app:layout_constraintEnd_toStartOf="@+id/kbn_text"
171
171
  app:layout_constraintTop_toTopOf="@+id/month_input_layout"
172
172
  app:theme="@style/EditTextStyle"/>
173
+
174
+ <EditText
175
+ android:id="@+id/edit_text"
176
+ android:layout_width="100dp"
177
+ android:layout_height="wrap_content"
178
+ app:layout_constraintBottom_toBottomOf="@+id/times_input_layout"
179
+ app:layout_constraintEnd_toStartOf="@+id/times_text"
180
+ app:layout_constraintTop_toTopOf="@+id/times_input_layout"
181
+ android:layout_marginEnd="5dp"
182
+ android:hint="0"
183
+ android:gravity="end"
184
+ android:inputType="number"
185
+ android:textColor="@color/black"
186
+ android:textSize="18sp"
187
+ android:maxLength="4"
188
+ android:text="@={viewModel.timesEdit}"
189
+ app:theme="@style/EditTextStyle"/>
173
190
  ```
174
191
 
175
192
 

1

該当箇所のコードを追記しました

2023/03/08 04:30

投稿

watashichanchan
watashichanchan

スコア8

test CHANGED
File without changes
test CHANGED
@@ -26,9 +26,123 @@
26
26
  ### 該当のソースコード
27
27
 
28
28
  DatePicerもNumberPickerも、ともに DialogFragment()を継承しています。
29
-
29
+ ・DatePicker
30
-
30
+ ```Kotlin
31
+ class DatePickerDialogFragment(private val editText: EditText) : DialogFragment(), DatePickerDialog.OnDateSetListener {
32
+
33
+ var setYear = 0
34
+ var setMonth = 0
35
+ var setDay = 0
36
+
37
+
38
+
39
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
40
+ val calendar = Calendar.getInstance()
41
+ val year = calendar.get(Calendar.YEAR)
42
+ val month = calendar.get(Calendar.MONTH)
43
+ val day = calendar.get(Calendar.DAY_OF_MONTH)
44
+
45
+
31
- DatePickerを設置しているEditText
46
+ return DatePickerDialog(
47
+ requireContext(),
48
+ R.style.DatePicker,
49
+ this,
50
+ year,
51
+ month,
52
+ day,
53
+ )
54
+ }
55
+
56
+ override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
57
+
58
+ val setLocalDate = LocalDate.of(year,month+1,dayOfMonth)
59
+ val format = DateTimeFormatter.ofPattern("yyyy年M月d日(E)")
60
+ val date =setLocalDate.format(format)
61
+
62
+ setYear = year
63
+ setMonth = month
64
+ setDay = dayOfMonth
65
+ editText.setText(date)
66
+
67
+ }
68
+ }
69
+ ```
70
+
71
+ ・NumberPicker
72
+ ```Kotlin
73
+ lass NumberPickerDialogFragment:DialogFragment(){
74
+
75
+ private lateinit var dialogView: View
76
+
77
+ private lateinit var listener: NoticeDialogListener
78
+ private var selectedYearItem by Delegates.notNull<Int>()
79
+ private var selectedMonthItem by Delegates.notNull<Int>()
80
+
81
+ interface NoticeDialogListener {
82
+ fun onNumberPickerDialogPositiveClick(dialog: DialogFragment, selectedYearItem: Int, selectedMonthItem:Int)
83
+ fun onNumberPickerDialogNegativeClick(dialog: DialogFragment)
84
+ }
85
+
86
+
87
+ override fun onAttach(context: Context) {
88
+ super.onAttach(context)
89
+ try{
90
+ val fragment = parentFragment
91
+ this.listener = fragment as NoticeDialogListener
92
+ }catch (e: ClassCastException){
93
+ throw ClassCastException("$context must implement NoticeDialogListener")
94
+ }
95
+ }
96
+
97
+
98
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
99
+ val inflater = requireActivity().layoutInflater
100
+ dialogView = inflater.inflate(R.layout.dialog_numberpicker,null)
101
+ val builder = AlertDialog.Builder(requireContext(),R.style.NumberPickerDialog)
102
+
103
+ builder.setView(dialogView)
104
+ builder.setTitle(R.string.month)
105
+ builder.setMessage(R.string.month_explanation)
106
+ builder.setIcon(R.drawable.ic_baseline_fact_check_24)
107
+
108
+ builder.setPositiveButton(R.string.ok){_,_ -> this.listener.onNumberPickerDialogPositiveClick(this,this.selectedYearItem,selectedMonthItem)}
109
+ builder.setNegativeButton(R.string.cancel){_,_ -> this.listener.onNumberPickerDialogNegativeClick(this) }
110
+
111
+ val current = LocalDateTime.now()
112
+
113
+
114
+ val yearNumberPicker = dialogView.findViewById<NumberPicker>(R.id.yearNumberPicker)
115
+ yearNumberPicker.setOnValueChangedListener(object :NumberPicker.OnValueChangeListener{
116
+ override fun onValueChange(picker: NumberPicker?, old: Int, new: Int) {
117
+ selectedYearItem = new
118
+ }
119
+ })
120
+ yearNumberPicker.minValue = current.year-1
121
+ yearNumberPicker.maxValue = current.year+30
122
+ yearNumberPicker.value = current.year
123
+ selectedYearItem = yearNumberPicker.value
124
+
125
+
126
+ val monthNumberPicker = dialogView.findViewById<NumberPicker>(R.id.monthNumberPicker)
127
+ monthNumberPicker.setOnValueChangedListener(object :NumberPicker.OnValueChangeListener{
128
+ override fun onValueChange(picker: NumberPicker?, old: Int, new: Int) {
129
+ selectedMonthItem = new
130
+ }
131
+ })
132
+ monthNumberPicker.minValue = 1
133
+ monthNumberPicker.maxValue = 12
134
+ monthNumberPicker.value = current.monthValue
135
+ selectedMonthItem = monthNumberPicker.value
136
+
137
+ return builder.create()
138
+ }
139
+
140
+ }
141
+ ```
142
+
143
+
144
+
145
+ ・入力画面のxml該当箇所
32
146
  ```xml
33
147
  <EditText
34
148
  android:id="@+id/date_edit_text"
@@ -43,11 +157,8 @@
43
157
  android:text="@={viewModel.dateEdit}"
44
158
  android:focusable="false"
45
159
  app:theme="@style/EditTextStyle"/>
46
- ```
160
+
47
-
48
- DatePickerを設置しているEditText
49
- ```xml
50
- <EditText
161
+ <EditText
51
162
  android:id="@+id/month_edit_text"
52
163
  android:layout_width="wrap_content"
53
164
  android:layout_height="wrap_content"
@@ -61,7 +172,9 @@
61
172
  app:theme="@style/EditTextStyle"/>
62
173
  ```
63
174
 
175
+
176
+ ・入力画面のDatePicker,
64
- DatePickerの呼び出し
177
+ NumberPickerの呼び出し部分
65
178
  ```kotlin
66
179
  binding.dateEditText.setOnClickListener {
67
180
 
@@ -69,10 +182,7 @@
69
182
  val fragmentManager = childFragmentManager
70
183
  datePickerFragment.show(fragmentManager,"datePicker")
71
184
  }
72
- ```
185
+
73
-
74
- NumberPickerの呼び出し
75
- ```kotlin
76
186
  binding.monthEditText.setOnClickListener {
77
187
  val numberPicker = NumberPickerDialogFragment()
78
188
  val fragmentManager = childFragmentManager