뷰에있는 스위치의 포지션을 가지고 싶다.
하지만 어뎁터에서 액티비티로 데이터를 이동할 방법이 제공되지 않는다.
어뎁터에 인터페에이스를 따로 등록하여 가져와 보도록 하자.
엑티비티
class VhclViewActivity : BaseActivity<ActivityVhclBinding, VhclViewModel>(),VhcleAdapter.OnItemClickEventListener, VhcleCallBack {
override val resId: Int = R.layout.activity_vhcl
override val viewModel: VhclViewModel by viewModel()
lateinit var mAdapter: VhcleAdapter
val switchList = mutableListOf<Int>()
override fun initView() {
binding.vm = viewModel
}
override fun initBinding() {
//TODO 임시
val list= ArrayList<VhcleInfoDto>()
list.add(VhcleInfoDto("1","1","1","1",0,0,"1",0,0,"1","1","1","1","1","1","1","1","1","1"))
setRecyclerView(list)
}
private fun setRecyclerView(
data: ArrayList<VhcleInfoDto>
) {
mAdapter = VhcleAdapter(
data,
this
)
mAdapter.setOnItemClickListener(this)
if (binding.vhcleRecyclerView.adapter == null) {
binding.vhcleRecyclerView.layoutManager = LinearLayoutManager(this)
binding.vhcleRecyclerView.adapter = mAdapter
} else {
binding.vhcleRecyclerView.adapter = mAdapter
}
}
override fun onItemClick(position: Int,state:String) {
//어뎁터에서 포지션값과 스위치 (on ,off) 에 따른 리스트 데이터 추가및 삭제
if(state.equals("put"))
switchList.add(position)
else
switchList.remove(position)
}
}
어뎁터
class VhcleAdapter(
private val dataSet: ArrayList<VhcleInfoDto>,
private val callBack: VhcleCallBack
) : RecyclerView.Adapter<VhcleAdapter.ViewHolder>() {
private var mItemClickListener: VhcleAdapter.OnItemClickEventListener? = null
//customViewHolder
class ViewHolder(
private val binding: LayoutVhcleItemBinding,
private val callBack: VhcleCallBack,
private val itemClickListener: VhcleAdapter.OnItemClickEventListener?
) : RecyclerView.ViewHolder(binding.root) {
private val mContext: Context = binding.root.context
fun bind(data: VhcleInfoDto, position: Int, maxSize: Int) {
binding.vhcleSwitch.setOnClickListener {
if(binding.vhcleSwitch.isChecked)
itemClickListener?.onItemClick(position,"put")
else
itemClickListener?.onItemClick(position,"out")
}
}
}
// Create new views (invoked by the layout manager)
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
// Create a new view, which defines the UI of the list item
val binding =
LayoutVhcleItemBinding.inflate(LayoutInflater.from(viewGroup.context), viewGroup, false)
return ViewHolder(
binding,
callBack,
mItemClickListener
)
}
fun setOnItemClickListener(listener: OnItemClickEventListener) {
mItemClickListener = listener
}
override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
// Get element from your dataset at this position and replace the
// contents of the view with that element
viewHolder.bind(dataSet[position], position, itemCount)
}
// Return the size of your dataset (invoked by the layout manager)
override fun getItemCount() = dataSet.size
override fun getItemViewType(position: Int): Int {
return position
}
//액티비티로 보내지는 아이템 값 얻기
interface OnItemClickEventListener {
fun onItemClick(position: Int,state: String)
}
}
끝
'프로그래밍 > kotlin' 카테고리의 다른 글
[Kotlin] 뷰 이미지 리사이징 (0) | 2023.07.13 |
---|---|
[Kotlin] drag and drop event (드래그드롭이벤트) (0) | 2023.07.13 |
루팅 체크 ! (0) | 2023.04.03 |
공용 로딩바 만들기 (0) | 2023.03.20 |
[kotlin]내부저장소 사용하기 (0) | 2023.03.17 |