質問編集履歴

2

ソース全容追加

2018/01/09 04:59

投稿

enigumalu
enigumalu

スコア192

test CHANGED
File without changes
test CHANGED
@@ -4,17 +4,109 @@
4
4
 
5
5
  forで指定された個数分生成しているので子viewなどでidを使い回す時の所作が全く想像できていません
6
6
 
7
+ MainActivity.kt
8
+
7
- ```
9
+ ```
10
+
11
+ import android.support.v7.app.AppCompatActivity
12
+
13
+ import android.os.Bundle
14
+
15
+ import android.view.View
16
+
17
+ import android.widget.*
18
+
19
+ import temple.count.ms.app.MainActivity.SeedTypeDialogFragment
20
+
21
+
22
+
23
+ class MainActivity : AppCompatActivity() {
24
+
25
+ protected var spinnerButton: Button? = null
26
+
27
+ protected var count = 0
28
+
29
+ private lateinit var seedTypeDialogFragment: SeedTypeDialogFragment
30
+
31
+ override fun onCreate(savedInstanceState: Bundle?) {
32
+
33
+ super.onCreate(savedInstanceState)
34
+
35
+ setContentView(R.layout.activity_main)
36
+
37
+
38
+
39
+
40
+
41
+ // Spinnerオブジェクトの取得
42
+
43
+ var totalNum: Spinner = this!!.findViewById(R.id.total_num) as Spinner
44
+
45
+ val totalNumKAry = arrayOf("1", "2", "3", "4", "5", "6", "7", "8")
46
+
47
+ setSpinner(totalNum, totalNumKAry)
48
+
49
+ }
50
+
51
+
52
+
53
+ /**
54
+
55
+ * setSpinner Spinner項目設定
56
+
57
+ * @param spinnerObj xmlスピナー項目.
58
+
59
+ * @param spinnerAry スピナーに設定する値.
60
+
61
+ */
62
+
63
+ fun setSpinner(spinnerObj: Spinner, spinnerAry: Array<kotlin.String>) {
64
+
65
+ // アダプタの作成(文字列だけのArrayAdapter)
66
+
67
+ var spinnerAdapter = ArrayAdapter(this, R.layout.support_simple_spinner_dropdown_item, spinnerAry)
68
+
69
+ // Spinnerにアダプタをセット
70
+
71
+ spinnerObj.adapter = spinnerAdapter
72
+
73
+ spinnerObj.onItemSelectedListener = TotalSpinnerSelectedListener()
74
+
75
+ }
76
+
77
+
78
+
79
+ inner class TotalSpinnerSelectedListener : AdapterView.OnItemSelectedListener {
80
+
81
+ override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
82
+
83
+ // Spinner を取得
84
+
85
+ val spinner = parent as Spinner
86
+
87
+ val layout = findViewById<View>(R.id.layout_org) as LinearLayout
88
+
89
+ layout.removeAllViews()
90
+
91
+ // 選択されたアイテムのテキストを取得
92
+
93
+ val spinnerStr = spinner.selectedItem.toString()
8
94
 
9
95
  for (i in 1..spinnerStr.toInt()) {
10
96
 
11
97
  val view = layoutInflater.inflate(R.layout.sub, null)
12
98
 
13
- // Spinner風のボタン
99
+ //Spinnerボタン
100
+
14
-
101
+ //TODO ここがただしくない
102
+
15
- spinnerButton = view.findViewById<View>(R.id.button) as Button
103
+ spinnerButton = view.findViewById<View>(R.id.button0) as Button
16
-
104
+
17
- spinnerButton!!.setText("選択")
105
+ spinnerButton!!.setText("選択してください"+i.toString())
106
+
107
+ spinnerButton!!.setTag(i)
108
+
109
+ count = i
18
110
 
19
111
  spinnerButton!!.setOnClickListener(onSpinnerClickListener)
20
112
 
@@ -22,4 +114,148 @@
22
114
 
23
115
  }
24
116
 
117
+ }
118
+
119
+ // 何も選択されなかった時の動作
120
+
121
+ override fun onNothingSelected(parent: AdapterView<*>) {}
122
+
123
+ }
124
+
125
+
126
+
127
+ //
128
+
129
+ private val onSpinnerClickListener = object : View.OnClickListener {
130
+
131
+ override fun onClick(v: View) {
132
+
133
+ v.setTag(count)
134
+
135
+ seedTypeDialogFragment = SeedTypeDialogFragment()
136
+
137
+ seedTypeDialogFragment.show(supportFragmentManager, "tag")
138
+
139
+ }
140
+
141
+ }
142
+
143
+ }
144
+
25
- ```
145
+ ```
146
+
147
+ SeedTypeDialogFragment.kt
148
+
149
+ ```
150
+
151
+ import android.os.Bundle
152
+
153
+ import android.annotation.SuppressLint
154
+
155
+ import android.app.Dialog
156
+
157
+ import android.support.v4.app.DialogFragment
158
+
159
+ import android.view.View
160
+
161
+ import android.view.LayoutInflater
162
+
163
+ import android.view.animation.AnimationUtils
164
+
165
+ import android.widget.*
166
+
167
+ import android.widget.LinearLayout
168
+
169
+ import com.example.test.myapplication3.R
170
+
171
+
172
+
173
+
174
+
175
+ @SuppressLint("ValidFragment")
176
+
177
+ class SeedTypeDialogFragment : DialogFragment() {
178
+
179
+ protected var spinnerButton: Button? = null
180
+
181
+
182
+
183
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
184
+
185
+ val dialog = Dialog(activity)
186
+
187
+ val inflater = LayoutInflater.from(activity)
188
+
189
+ val view = inflater.inflate(R.layout.seedtype_selected_item, null,false)
190
+
191
+
192
+
193
+ val layout = view.findViewById(R.id.layout) as LinearLayout
194
+
195
+ val iCount = layout.getChildCount()
196
+
197
+
198
+
199
+ var i = 0
200
+
201
+ while (i < iCount) {
202
+
203
+ val v: View
204
+
205
+ v = layout.getChildAt(i)
206
+
207
+ v!!.setOnClickListener(textButtonClick)
208
+
209
+ i++
210
+
211
+ }
212
+
213
+ dialog.setContentView(view)
214
+
215
+ return dialog
216
+
217
+ }
218
+
219
+ override fun onPause() {
220
+
221
+ super.onPause()
222
+
223
+ // onPause でダイアログを閉じる場合
224
+
225
+ dismiss()
226
+
227
+ }
228
+
229
+ // アクティビティ
230
+
231
+ private val textButtonClick = object : View.OnClickListener {
232
+
233
+ override fun onClick(view: View) {
234
+
235
+ view!!.startAnimation(AnimationUtils.loadAnimation(activity, R.anim.button))
236
+
237
+ val bt = view as TextView
238
+
239
+ val buttonText = bt.text.toString()
240
+
241
+ val parentView = view.getParent() as View
242
+
243
+ //TODO 動的生成の影響を受けている
244
+
245
+ spinnerButton = activity.findViewById<View>(R.id.button0) as Button
246
+
247
+ spinnerButton!!.setText(buttonText)
248
+
249
+ Toast.makeText(activity, buttonText, Toast.LENGTH_SHORT).show()
250
+
251
+ dismiss()
252
+
253
+ }
254
+
255
+ }
256
+
257
+
258
+
259
+ }
260
+
261
+ ```

1

追記

2018/01/09 04:59

投稿

enigumalu
enigumalu

スコア192

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,8 @@
1
1
  androidで複数項目を動的に生成した際にxmlで指定しているR.id.buttonが同じ名前で複数できてしまい、ここにプログラム側でsetOnClickListenerを設定できなく困っています
2
2
 
3
3
  xmlを利用して複数個生成したタイミングでbuttonアイテムにClickListenerを設定する事はできるのでしょうか?
4
+
5
+ forで指定された個数分生成しているので子viewなどでidを使い回す時の所作が全く想像できていません
4
6
 
5
7
  ```
6
8