从Recyclerview项目激活首页

时间:2020-07-20 01:26:14

标签: android android-layout kotlin android-recyclerview android-arrayadapter

我正在尝试做到这一点,因此,当用户在recyclerview中单击/选择一个项目时,最上面的页面从顶部向下排列。基本上,我想做的就是将函数openSheet()调用到CustomAdapter的onclick()中,以便当用户单击该项目时,首页下降。

MainActivity.kt

open class MainActivity : AppCompatActivity(), BottomSheetRecyclerViewAdapter.ListTappedListener {

private lateinit var button: Button
private lateinit var topSheetBehavior: TopSheetBehavior<View>
private var customAdapter: CustomAdapter? = null
private lateinit var bottomSheetBehavior: CustomBottomSheetBehavior<ConstraintLayout>

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


}

fun openSheet() {
        topSheetBehavior = TopSheetBehavior.from(topSheetContainer)

        button = findViewById(R.id.btn_open_top_sheet)

        button.setOnClickListener {
            openTopSheet()
            Log.d("buttonhitting", "buttonhitting")
        }

    }

 private fun openTopSheet() {
        topSheetBehavior.state = TopSheetBehavior.STATE_EXPANDED
        topSheetBehavior.setTopSheetCallback(object : TopSheetBehavior.TopSheetCallback() {
            override fun onSlide(bottomSheet: View, slideOffset: Float, isOpening: Boolean?) {

            }

            override fun onStateChanged(bottomSheet: View, newState: Int) {
            }
        })
    }

}

CustomAdapter.kt

class CustomAdapter(val modelList: List<Model>, val context: Context) :

    RecyclerView.Adapter<RecyclerView.ViewHolder>() {

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {

        (holder as ViewHolder).bind(modelList.get(position));
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {

        val layoutInflater = LayoutInflater.from(parent.context)
        return ViewHolder(layoutInflater.inflate(R.layout.row_item, parent, false))
    }

    override fun getItemCount(): Int {
        return modelList.size;
    }

    lateinit var mClickListener: ClickListener

    fun setOnItemClickListener(aClickListener: ClickListener) {

        mClickListener = aClickListener
    }

    interface ClickListener {
        fun onClick(pos: Int, aView: () -> Unit)

    }

    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {

        init {
            itemView.setOnClickListener(this)

            Log.d("couponhitting", "coupon hitting")

        }

        override fun onClick(p0: View?) {

        }

        fun bind(model: Model): Unit {
            itemView.txt.text = model.name
            itemView.sub_txt.text = model.version

            val id = context.resources.getIdentifier(model.name.toLowerCase(Locale.ROOT), "drawable", context.packageName)
            itemView.img.setBackgroundResource(id)
        }
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimary"
    tools:context=".MainActivity">

    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">
        <include
            android:id="@+id/topSheetContainer"
            layout="@layout/top_sheet"
            app:layout_anchorGravity="bottom" />
    </androidx.coordinatorlayout.widget.CoordinatorLayout>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/bottomSheetLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/bottom_sheet_background_drawable"
        android:elevation="25dp"
        app:behavior_hideable="false"
        app:behavior_peekHeight="65dp"
        app:layout_behavior=".CustomBottomSheetBehavior">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="8dp"
            android:background="@drawable/back_white"
            android:id="@+id/ll_search">

            <EditText
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:id="@+id/et_search"
                android:textSize="14sp"
                android:layout_marginTop="15dp"
                android:background="@drawable/custom_search"
                android:drawableStart="@android:drawable/ic_menu_search"
                android:drawablePadding="6dp"/>

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:layout_marginTop="55dp">
                
            </LinearLayout>

        </RelativeLayout>


        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_margin="8dp"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:background="@android:color/transparent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/ll_search"
            tools:listitem="@layout/item_bottom_sheet_recycler_view">
        </androidx.recyclerview.widget.RecyclerView>

    </androidx.constraintlayout.widget.ConstraintLayout>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

0 个答案:

没有答案