如何在 Kotlin 中为 RecyclerView 添加项目分隔符

Era*_*per 7 android kotlin

我正在开发一个应用程序,其中有一个包含 recyclerview 的列表,我想为项目添加分隔符。我已经创建了 ItemDividerDecorator 类和 xml 布局文件,但我没有连接到回收器视图。

我知道在java中怎么做,像这样:

recyclerView.addItemDecoration(
                new DividerItemDecoration(ContextCompat.getDrawable(getApplicationContext(),
                        R.drawable.item_separator)));
Run Code Online (Sandbox Code Playgroud)

但是我怎么能在 Kotlin 中做,我也尝试在 Android Studio 中转换它,但显示了一些错误。这是我的装饰器类:

    private val mdivider:Drawable
    init{
        this.mdivider = mdivider
    }
    override fun onDrawOver(canvas: Canvas, parent:RecyclerView, state:RecyclerView.State) {
        val left = parent.getPaddingLeft()
        val right = parent.getWidth() - parent.getPaddingRight()
        val childCount = parent.getChildCount()
        for (i in 0 until childCount)
        {
            val child = parent.getChildAt(i)
            val params = child.getLayoutParams() as RecyclerView.LayoutParams
            val top = child.getBottom() + params.bottomMargin
            val bottom = top + mdivider.getIntrinsicHeight()
            mdivider.setBounds(left, top, right, bottom)
            mdivider.draw(canvas)
        }
    }
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏

Moh*_*hri 14

对于科特林:

 recycler_view.addItemDecoration(
            DividerItemDecoration(
                context,
                LinearLayoutManager.HORIZONTAL
            )
        )
Run Code Online (Sandbox Code Playgroud)

如果你这样初始化:

private lateint var context:Context
Run Code Online (Sandbox Code Playgroud)

然后在你的 onCreateView 里面

 override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    // Intialize context here 
    context = parent.context()
    rootView = container?.inflateView(layoutToInflate) ?: View(context)
    onFragmentCreated(rootView)
    return rootView
}
Run Code Online (Sandbox Code Playgroud)

如果您在活动中使用,则改为使用

应用上下文

val decorator = DividerItemDecoration(applicationContext, LinearLayoutManager.VERTICAL)
            decorator.setDrawable(ContextCompat.getDrawable(applicationContext, R.drawable.file)!!)
            recycler_view.addItemDecoration(decorator)
Run Code Online (Sandbox Code Playgroud)


Ank*_*kit 6

试试这个 kotlin

对于默认项目分隔符

recyclerview.addItemDecoration(DividerItemDecoration(this@YourActivity, LinearLayoutManager.VERTICAL))
Run Code Online (Sandbox Code Playgroud)

可绘制作为项目分隔符

  val divider = DividerItemDecoration(this@MainActivity,DividerItemDecoration.VERTICAL) 
    divider.setDrawable(ContextCompat.getDrawable(this@MainActivity,R.drawable.item_separator)!!)
    recyclerview.addItemDecoration(divider)
Run Code Online (Sandbox Code Playgroud)

用于Java

recyclerView.addItemDecoration(new DividerItemDecoration(getContext(),LinearLayoutManager.VERTICAL));
Run Code Online (Sandbox Code Playgroud)