Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在选定的GridLayout位置上创建意图_Android_Grid Layout - Fatal编程技术网

Android 在选定的GridLayout位置上创建意图

Android 在选定的GridLayout位置上创建意图,android,grid-layout,Android,Grid Layout,我正在尝试创建一个方法,该方法将侦听单击的项目,如果单击了类别,它将打开所选的活动。我有一个网格布局设置,但我不确定如何设置onClickListener或onRecycleServiceItemClick。我确实有一个我相信可以实现的伪代码,但需要相关的指导 这是我的MainActivity.kt: GridItemDecoration.kt: CategoryListGridRecyclerAdapter.kt 您可以这样做: lateinit var mOnItemClickListe

我正在尝试创建一个方法,该方法将侦听单击的项目,如果单击了类别,它将打开所选的活动。我有一个网格布局设置,但我不确定如何设置onClickListener或onRecycleServiceItemClick。我确实有一个我相信可以实现的伪代码,但需要相关的指导

这是我的MainActivity.kt:

GridItemDecoration.kt:

CategoryListGridRecyclerAdapter.kt


您可以这样做:

  lateinit var mOnItemClickListener: (category: Category,pos: Int)-> Unit

  fun setOnItemClickListener(callback: (category: Category,pos: Int)-> Unit){
    mOnItemClickListener = callback
  }

  override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
    return CategoryListViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.product_row, parent, false))
            .listen {pos,_ ->      
                 if(::mOnItemClickListener.isInitialized){
                       mOnItemClickListener(listOfCategory[pos],pos)
                 }
             }
  }
 //I took this code from a post a while back, don't know the author
 fun <T : RecyclerView.ViewHolder> T.listen(event: (position: Int, type: Int) -> Unit): T {
     itemView.setOnClickListener {
        event.invoke(adapterPosition, itemViewType)
     }
     return this
 }

顶部的应该添加到CategoryListGridRecyclerAdapter.kt,对吗?
class GridItemDecoration(gridSpacingPx: Int, gridSize: Int) : RecyclerView.ItemDecoration() {
    private var mSizeGridSpacingPx: Int = gridSpacingPx
    private var mGridSize: Int = gridSize

    private var mNeedLeftSpacing = false

    override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
        val frameWidth = ((parent.width - mSizeGridSpacingPx.toFloat() * (mGridSize - 1)) / mGridSize).toInt()
        val padding = parent.width / mGridSize - frameWidth
        val itemPosition = (view.getLayoutParams() as RecyclerView.LayoutParams).viewAdapterPosition

        if (itemPosition < mGridSize) {
            outRect.top = 0
        } else {
            outRect.top = mSizeGridSpacingPx
        }
        if (itemPosition % mGridSize == 0) {
            outRect.left = 0
            outRect.right = padding
            mNeedLeftSpacing = true
        } else if ((itemPosition + 1) % mGridSize == 0) {
            mNeedLeftSpacing = false
            outRect.right = 0
            outRect.left = padding
        } else if (mNeedLeftSpacing) {
            mNeedLeftSpacing = false
            outRect.left = mSizeGridSpacingPx - padding
            if ((itemPosition + 2) % mGridSize == 0) {
                outRect.right = mSizeGridSpacingPx - padding
            } else {
                outRect.right = mSizeGridSpacingPx / 2
            }
        } else if ((itemPosition + 2) % mGridSize == 0) {
            mNeedLeftSpacing = false
            outRect.left = mSizeGridSpacingPx / 2
            outRect.right = mSizeGridSpacingPx - padding
        } else {
            mNeedLeftSpacing = false
            outRect.left = mSizeGridSpacingPx / 2
            outRect.right = mSizeGridSpacingPx / 2
        }
        outRect.bottom = 0
    }
}
class CategoryListGridRecyclerAdapter:RecyclerView.Adapter<RecyclerView.ViewHolder>() {
    private var listOfCategory = listOf<Category>()
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        return CategoryListViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.product_row, parent, false))

    }

    override fun getItemCount(): Int = listOfCategory.size

    override fun onBindViewHolder(viewHolder: RecyclerView.ViewHolder, position: Int) {
        val productViewHolder = viewHolder as CategoryListViewHolder
        productViewHolder.bindView(listOfCategory[position])
    }

    fun setProductList(listOfCategory: List<Category>) {
        this.listOfCategory = listOfCategory
        notifyDataSetChanged()
    }
}
  lateinit var mOnItemClickListener: (category: Category,pos: Int)-> Unit

  fun setOnItemClickListener(callback: (category: Category,pos: Int)-> Unit){
    mOnItemClickListener = callback
  }

  override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
    return CategoryListViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.product_row, parent, false))
            .listen {pos,_ ->      
                 if(::mOnItemClickListener.isInitialized){
                       mOnItemClickListener(listOfCategory[pos],pos)
                 }
             }
  }
 //I took this code from a post a while back, don't know the author
 fun <T : RecyclerView.ViewHolder> T.listen(event: (position: Int, type: Int) -> Unit): T {
     itemView.setOnClickListener {
        event.invoke(adapterPosition, itemViewType)
     }
     return this
 }
categoryListAdapter.setOnItemClickListener { category, pos ->
 ...
}