CoordinatorLayout
을 사용하여 삭제 슬쩍을 구현하려는
에 CoordinatorLayout의 LayoutParams를 가져올 수 없습니다, 그래서 문제가RecyclerView
open class SwipeableAdapter(val list:ArrayList<SimpleModel>) : RecyclerView.Adapter<SwipeableAdapter.ViewHolder>() {
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
var nameTextView: TextView
var coordinatorLayout: CoordinatorLayout
init {
nameTextView = view.findViewById(R.id.simpleModelName)
coordinatorLayout = view.findViewById(R.id.coordinatorLayout)
}
}
override fun onCreateViewHolder(viewGroup: ViewGroup, i: Int): SwipeableAdapter.ViewHolder {
val view = LayoutInflater.from(viewGroup.context).inflate(R.layout.item_simple_model, viewGroup, false)
return ViewHolder(view)
}
override fun onBindViewHolder(viewHolder: SwipeableAdapter.ViewHolder, position: Int) {
viewHolder.nameTextView.text = list[position].name
var swipe = SwipeDismissBehavior<View>()
swipe.setSwipeDirection(SwipeDismissBehavior.SWIPE_DIRECTION_END_TO_START)
swipe.setListener(object : SwipeDismissBehavior.OnDismissListener {
override fun onDismiss(view: View?) {
}
override fun onDragStateChanged(state: Int) {
}
})
Log.e("onBindViewHolder","layout "+viewHolder.coordinatorLayout.javaClass.toString())
Log.e("onBindViewHolder","layout "+viewHolder.coordinatorLayout.layoutParams.javaClass.toString())
val coordinatorLayoutParams = viewHolder.coordinatorLayout.layoutParams as CoordinatorLayout.LayoutParams
coordinatorLayoutParams.behavior = swipe
}
override fun getItemCount(): Int {
return list.size
}
}
각 RecyclerView
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:id="@+id/coordinatorLayout"
android:layout_height="wrap_content">
<TextView
android:id="@+id/simpleModelName"
android:layout_width="wrap_content"
android:textSize="16sp"
android:padding="10dp"
android:layout_height="wrap_content" />
</android.support.design.widget.CoordinatorLayout>
의 항목과 간단한 어댑터에 대한 간단한 XML을 생성 이 줄은 다음과 같습니다.
val coordinatorLayoutParams = viewHolder.coordinatorLayout.layoutParams as CoordinatorLayout.LayoutParams
나는 stacktrace : 나는 무엇이다
:
java.lang.ClassCastException: android.support.v7.widget.RecyclerView$LayoutParams cannot be cast to android.support.design.widget.CoordinatorLayout$LayoutParams
at app.deadmc.swipeablelayout.SwipeableAdapter.onBindViewHolder(SwipeableAdapter.kt:43)
at app.deadmc.swipeablelayout.SwipeableAdapter.onBindViewHolder(SwipeableAdapter.kt:12)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6508)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6541)
at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5484)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5750)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5589)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5585)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2231)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1558)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1518)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:610)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3719)
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:3135)
at android.view.View.measure(View.java:19861)
at android.support.constraint.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:934)
at android.support.constraint.ConstraintLayout.onMeasure(ConstraintLayout.java:973)
좋아,
Log.e("tag","layout "+viewHolder.coordinatorLayout.javaClass.toString())
Log.e("tag","layout "+viewHolder.coordinatorLayout.layoutParams.javaClass.toString())
이
12-29 13:46:16.310 19129-19129/? E/tag: layout class android.support.design.widget.CoordinatorLayout
12-29 13:46:16.310 19129-19129/? E/tag: layout class android.support.v7.widget.RecyclerView$LayoutParams
질문은 보여줍니다, 문제는, 그것을 기록, 발견 뭐죠 확인하기 시작 잘못하고있는거야? 왜 CoordinatorLayout
이 나에게 RecyclerView$LayoutParams
을 제공합니까?
일반적으로 ItemTouchHelper를 사용하지만 CoordinatorLayout과 함께 작동하는지 확인하고 싶습니다. 부모보기를 사용하려고합니다. – DEADMC
그런 다음'nameTextView' 뷰를 직접 사용해보십시오. 그러면 '스 와이프'동작이 있어야한다고 생각합니다. 올바른 'LayoutParams'가 있어야합니다. – tynn
방금 추가 레이아웃으로 포장했습니다. 그리고 그게 효과가있어, 고마워. – DEADMC