質問編集履歴
2
EditTextのコードを追記しました
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
該当箇所のコードを追記しました
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
|
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
|
-
|
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
|
-
|
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
|