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 459 forks source link

How to get CellViewHolder correctly ? #141

Closed bogdanmunteanu closed 6 years ago

bogdanmunteanu commented 6 years ago

Hi @evrencoskun

I am trying to change the layout in every CellViewHolder when clicking on the ColumnViewHolder. For some reason , in some cases the CellViewHolder is null and shouldn't be .

If I put a null check , in some cases there are 3 holders null , sometimes more.

Here is my code :

@Override
     public void onColumnHeaderClicked(@NonNull RecyclerView.ViewHolder columnHeaderView, int
             column) {
            //ask user if he wants to remove all dates from this
           ColumnHeaderViewHolder columnHeaderHolder = (ColumnHeaderViewHolder) 
       mTableView.getColumnHeaderLayoutManager().getViewHolder(column);
    //int rows = mTableView.getAdapter().getRowHeaderRecyclerViewAdapter().getItemCount();

    Log.e("Column items size",mTableView.getAdapter().getCellColumnItems(column).size()+"");

    int rows = mTableView.getAdapter().getCellColumnItems(column).size();

        if(columnHeaderHolder.getSelected())
        {
            columnHeaderHolder.selectionImage.setImageDrawable(ContextCompat.getDrawable(columnHeaderHolder.getContext(),R.drawable.ic_trip_unselected));
            columnHeaderHolder.setSelected(false);
            for(Object c : mTableView.getAdapter().getCellColumnItems(column))
            {
               ((Cell) c).setSelected(false);
            }

            for(int rowNbr=0;rowNbr<rows;rowNbr++)
            {
                CellViewHolder cellHolder = (CellViewHolder) mTableView.getCellLayoutManager().getCellViewHolder(column,rowNbr);
                cellHolder.cellText.setTextColor(ContextCompat.getColor(mContext,R.color.dark_gray));  //cellText here is null in random cases .
                cellHolder.image.setColorFilter(ContextCompat.getColor(mContext,R.color.dark_gray));
            }

        }else
        {
            columnHeaderHolder.selectionImage.setImageDrawable(ContextCompat.getDrawable(columnHeaderHolder.getContext(),R.drawable.ic_trip_selected));
            columnHeaderHolder.setSelected(true);
            for(Object c : mTableView.getAdapter().getCellColumnItems(column))
            {
                ((Cell) c).setSelected(true);
            }

            for(int rowNbr=0;rowNbr<rows;rowNbr++)
            {
                CellViewHolder cellHolder = (CellViewHolder) mTableView.getCellLayoutManager().getCellViewHolder(column,rowNbr);
                cellHolder.cellText.setTextColor(ContextCompat.getColor(mContext,R.color.dark_gray));
                cellHolder.image.setColorFilter(ContextCompat.getColor(mContext,R.color.dark_gray));
            }

        }