class ChapterActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_chapter)
...여기에 있던 코드는 책의 각 제목이면서, 동시에 리사이클러뷰의 각 항목들로써, 버튼이기도 합니다. 생략....
val recy23 = findViewById<RecyclerView>(R.id.recycler_view1)
val adapter = SampleAdapter5(dataSet1)
recy23.adapter = SampleAdapter5(dataSet1)
val recy24 = findViewById<RecyclerView>(R.id.recycler_view2)
val dataSet2 : ArrayList<String> = arrayListOf()
recy24.adapter = SampleAdapter6(dataSet2)
for (i in 1..30) { <---★ 이렇게 할 때에는 화면에 출력이 잘되는데
dataSet2.add("$i 장")
}
adapter.setOnItemClickListener(object : SampleAdapter5.OnItemClickListener {
override fun onItemClick(v: View?, position: Int) {
when (position) {
0 -> { ↓★버튼도 반응을 아예 안합니다.
for (i in 1..50) { <---★이렇게 하면 출력이 안됩니다...
dataSet2.add("$i 장")
//notifyItemChanged(position)
}
}
}
}
})
class SampleAdapter5(private val dataSet: ArrayList<String>) : RecyclerView.Adapter<SampleAdapter5.NumberViewHolder>() {
private var mData: ArrayList<String>? = null
init {
mData = dataSet
}
interface OnItemClickListener {
fun onItemClick(v: View?, position: Int)
}
private var mListener: OnItemClickListener? = null
fun setOnItemClickListener(listener: OnItemClickListener?) {
mListener = listener
}
//★
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NumberViewHolder {
val layoutView: LinearLayout = LayoutInflater.from(parent.context).inflate(R.layout.activity_bible3927, parent, false) as LinearLayout
return NumberViewHolder(layoutView)
}
override fun getItemCount(): Int = mData!!.size
override fun onBindViewHolder(holder: NumberViewHolder, position: Int) {
holder.number.text = mData!![position]
}
inner class NumberViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val number = itemView.findViewById(R.id.textView111) as TextView
init {
itemView.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
val pos = adapterPosition
if (pos != RecyclerView.NO_POSITION) {
//dataSet[pos] = "item clicked. pos=$pos"
if (mListener != null) {
mListener!!.onItemClick(v, pos)
}
}
}
})
}
}
}
class SampleAdapter6(private val dataSet: ArrayList<String>) : RecyclerView.Adapter<SampleAdapter6.NumberViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NumberViewHolder {
val layoutView: LinearLayout = LayoutInflater.from(parent.context).inflate(R.layout.activity_bible3927_1, parent, false) as LinearLayout
return NumberViewHolder(layoutView)
}
override fun getItemCount(): Int = dataSet.size
override fun onBindViewHolder(holder: NumberViewHolder, position: Int) {
holder.number.text = dataSet[position]
}
inner class NumberViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val number = itemView.findViewById(R.id.textView222) as TextView
}
}
}
}
리사이클러뷰에 배열 데이터를 대입한 후에, 화면에 출력시키려고 했는데, 출력이 안되고 있습니다.
저는 두 개의 리사이클러뷰를 갖고 있는데, 첫 번째 리사이클러뷰의 아이템을 클릭하면,
두 번째 리사이클러뷰에 1장, 2장, 3장, 4장, 5장.... 이런식으로 쭉 출력이 되도록 하고 싶었습니다.
근데 왜그런지는 잘 몰라도, 그냥 for문을 사용했을 때에는 정상적으로 화면에 1부터 30까지 잘 출력되는데,
어댑터에 있는 배열의 인덱스 값을 onCreate() 함수 내부로 가져와서 사용할 때에는 for문이 먹히질 않습니
다. mListener가 뭘 의미하는 것인지... 이것도 잘 모르겠습니다. mListener가 문제인건지, 아니면 for문에 문제
가 있었던건지... 뭔지... 잘 모르겠습니다. 아니면, 버튼 클릭 이벤트가 잘못 되어있던 것인지...