evrencoskun / TableView

TableView is a powerful Android library for displaying complex data structures and rendering tabular data composed of rows, columns and cells.
MIT License
3.14k stars 454 forks source link

[QUESTION] Kotlin example #348

Open gfernandez-me opened 3 years ago

gfernandez-me commented 3 years ago

Hi,

Does anyone have any examples implemented in a Kotlin project?

I tried to copy the sample application and use the android studio machine translation, but I couldn't get the grid to work.

Thank you

MGaetan89 commented 3 years ago

What issue are you having when using Kotlin?

bennysway commented 3 years ago

Here is an example of an Adapter that handles Row(val string: String) Column(val string ...etc

class MyTableViewAdapter :
    AbstractTableAdapter<ColumnHeader, RowHeader, Cell>() {

    class MyCellViewHolder(itemView: View) :
        AbstractViewHolder(itemView) {
        val cellContainer: LinearLayout = itemView.findViewById(R.id.cell_container)
        val cellTextView: TextView = itemView.findViewById(R.id.cell_data)

    }

    override fun onCreateCellViewHolder(
        parent: ViewGroup,
        viewType: Int
    ): AbstractViewHolder {
        val layout: View = LayoutInflater.from(parent.context)
            .inflate(R.layout.table_view_cell_layout, parent, false)
        return MyCellViewHolder(layout)
    }

    override fun onBindCellViewHolder(
        holder: AbstractViewHolder,
        cellItemModel: Cell?,
        columnPosition: Int,
        rowPosition: Int
    ) {
        val cell =
            cellItemModel as Cell

        val viewHolder =
            holder as MyCellViewHolder
        viewHolder.cellTextView.text = cell.data

        viewHolder.cellContainer.layoutParams.width = LinearLayout.LayoutParams.WRAP_CONTENT
        viewHolder.cellTextView.requestLayout()
    }

    class MyColumnHeaderViewHolder(itemView: View) :
        AbstractViewHolder(itemView) {
        val columnHeaderContainer: LinearLayout =
            itemView.findViewById(R.id.column_header_container)
        val cellTextView: TextView = itemView.findViewById(R.id.column_header_textView)
        val lineDivider: View = itemView.findViewById(R.id.vLine)

    }

    override fun onCreateColumnHeaderViewHolder(
        parent: ViewGroup,
        viewType: Int
    ): AbstractViewHolder {

        val layout: View = LayoutInflater.from(parent.context)
            .inflate(R.layout.table_view_column_header_layout, parent, false)

        return MyColumnHeaderViewHolder(layout)
    }

    override fun onBindColumnHeaderViewHolder(
        holder: AbstractViewHolder,
        columnHeaderItemModel: ColumnHeader?,
        position: Int
    ) {
        val columnHeader = columnHeaderItemModel as ColumnHeader

        val columnHeaderViewHolder =
            holder as MyColumnHeaderViewHolder
        columnHeaderViewHolder.cellTextView.text = columnHeader.data

        columnHeaderViewHolder.columnHeaderContainer.layoutParams.width =
            LinearLayout.LayoutParams.WRAP_CONTENT
        columnHeaderViewHolder.cellTextView.requestLayout()
    }

    class MyRowHeaderViewHolder(itemView: View) :
        AbstractViewHolder(itemView) {
        val parentView: RelativeLayout = itemView.findViewById(R.id.row_root)
        val cellTextView: TextView = itemView.findViewById(R.id.row_header_textView)
        val lineDivider: View = itemView.findViewById(R.id.vLine)
    }

    override fun onCreateRowHeaderViewHolder(
        parent: ViewGroup,
        viewType: Int
    ): AbstractViewHolder {

        val layout: View = LayoutInflater.from(parent.context)
            .inflate(R.layout.table_view_row_header_layout, parent, false)

        return MyRowHeaderViewHolder(layout)
    }

    override fun onBindRowHeaderViewHolder(
        holder: AbstractViewHolder,
        rowHeaderItemModel: RowHeader?,
        position: Int
    ) {
        val rowHeader = rowHeaderItemModel as RowHeader

        val rowHeaderViewHolder =
            holder as MyRowHeaderViewHolder

        rowHeaderViewHolder.cellTextView.text = rowHeader.data
    }

    override fun onCreateCornerView(parent: ViewGroup): View {
        return LayoutInflater.from(parent.context)
            .inflate(R.layout.table_view_corner_layout, parent, false)
    }

    override fun getColumnHeaderItemViewType(columnPosition: Int): Int {
        return 0
    }

    override fun getRowHeaderItemViewType(rowPosition: Int): Int {
        return 0
    }

    override fun getCellItemViewType(columnPosition: Int): Int {
        return 0
    }
}
ggbandAdapter commented 1 year ago

add kapt.use.worker.api=false gradle.properties