Android custom DataGridView data table control and android custom control

Source: Internet
Author: User

Android custom DataGridView data table control and android custom control

I am a. net programmer, but I am suffering from the company's requirement to develop an android app. I can't help but stick to my head.

Since data display controls (similar to. net DataGridView) are needed in many parts of the project, du Niang finds that no similar controls are made public, so she cannot write them by herself.

Paste the Code directly:

public class DataGridView extends HorizontalScrollView {    private List<DataGridViewColumn> columns;    private List<Map<String,String>> rows;    private boolean hasHeader;    private CellClickListener cellClickListener;    private RowClickListener rowClickListener;    private RowValidatorListener rowValidatorListener;    private LinearLayout headerRow;    private LinearLayout bodyRow;    public DataGridView(Context context, AttributeSet attrs) {        super(context, attrs);        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DataGridView);        hasHeader = a.getBoolean(R.styleable.DataGridView_hasHeader, true);        a.recycle();        LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);        LinearLayout container = (LinearLayout) inflater.inflate(R.layout.ctrl_data_grid_view, null, false);        addView(container);        this.columns = new ArrayList<DataGridViewColumn>();        this.rows = new ArrayList<Map<String,String>>();         headerRow = new LinearLayout(getContext());         headerRow.setOrientation(LinearLayout.HORIZONTAL);         headerRow.setBackgroundResource(R.drawable.datagrid_header_background);         headerRow.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));        if (hasHeader){            container.addView(headerRow);        }        ScrollView scrollView = (ScrollView)inflater.inflate(R.layout.ctrl_data_grid_view_scroll, container, false);        bodyRow = (LinearLayout) inflater.inflate(R.layout.ctrl_data_grid_view, scrollView, false);        scrollView.addView(bodyRow);        container.addView(scrollView);    }    public void addColumn(String dataField, String headerText){        this.addColumn(dataField, headerText, 200);    }    public void addColumn(String dataField, String headerText, int columnWidth){        this.addColumn(dataField, headerText, columnWidth, Gravity.START);    }    public void addColumn(String dataField, String headerText, int columnWidth, int textAlign){        this.addColumn(dataField, headerText, columnWidth, textAlign, Color.rgb(80, 80, 80));    }    public void addColumn(String dataField, String headerText, int columnWidth, int textAlign, int textColor){        this.addColumn(dataField, headerText, columnWidth, textAlign, textColor, true);    }    public void addColumn(String dataField, String headerText, int columnWidth, int textAlign, int textColor, boolean isEnabled){        DataGridViewColumn column = new DataGridViewColumn();        column.dataField =dataField;        column.headerText = headerText;        column.columnWidth = columnWidth;        column.textAlign = textAlign;        column.textColor = textColor;        column.isEnabled = isEnabled;        this.addColumn(column);    }    public void addColumn(DataGridViewColumn column){        columns.add(column);        insertColumn(column);        if (rows.size() > 0){            bodyRow.removeAllViews();            for (Map<String,String> row : rows){                insertRow(row);            }        }    }    public void addColumn(DataGridViewColumn column, int index){        columns.add(column);        insertColumn(column, index);        if (rows.size() > 0){            bodyRow.removeAllViews();            for (Map<String,String> row : rows){                insertRow(row);            }        }    }    public void removeColumn(int index){        columns.remove(index);    }    public void removeColumn(String dataField){        for (DataGridViewColumn column : columns){            if (column.dataField.equals(dataField)){                this.removeColumn(column);                if (rows.size() > 0){                    bodyRow.removeAllViews();                    for (Map<String,String> row : rows){                        insertRow(row);                    }                }                return;            }        }    }    public void removeColumn(DataGridViewColumn column){        columns.remove(column);    }    public void setDataSource(List<Map<String,String>> rows){        this.rows = rows;        if (columns.size() > 0){            bodyRow.removeAllViews();            for (Map<String,String> row : rows){                insertRow(row);            }        }    }    public void addRow(Map<String,String> row){        rows.add(row);        if (columns.size() > 0) {            insertRow(row);        }    }    public void addRow(Map<String,String> row, int index){        rows.add(index, row);        if (columns.size() > 0) {            insertRow(row, index);        }    }    public void removeRow(int index){        rows.remove(index);    }    public void removeRow(Map<String,String> row){        rows.remove(row);    }    public void setCellClickListener(CellClickListener cellClickListener) {        this.cellClickListener = cellClickListener;    }    public void setRowClickListener(RowClickListener rowClickListener) {        this.rowClickListener = rowClickListener;    }    public void setRowValidatorListener(RowValidatorListener rowValidatorListener) {        this.rowValidatorListener = rowValidatorListener;    }    public boolean isHasHeader() {        return hasHeader;    }    public void setHasHeader(boolean hasHeader) {        this.hasHeader = hasHeader;    }    private void insertColumn(DataGridViewColumn column){        this.insertColumn(column, -1);    }    private void insertColumn(DataGridViewColumn column, int index){        LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);        TextView headerTextView = (TextView) inflater.inflate(R.layout.ctrl_data_grid_view_column, headerRow, false);        headerTextView.setText(column.headerText);        headerTextView.setLayoutParams(new LayoutParams(column.columnWidth, LayoutParams.WRAP_CONTENT, 1));        if (index == -1){            headerRow.addView(headerTextView);        }else {            headerRow.addView(headerTextView, index);        }    }    public DataGridViewColumn getColumn(int index){        return columns.get(index);    }    private void insertRow(final Map<String, String> row){        this.insertRow(row, -1);    }    private void insertRow(final Map<String,String> row, int index){        LinearLayout dataRow = new LinearLayout(getContext());        dataRow.setOrientation(LinearLayout.HORIZONTAL);        dataRow.setSelected(true);        dataRow.setClickable(true);        dataRow.setBackgroundResource(R.drawable.datagrid_row_border);        dataRow.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));        LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);        for (final DataGridViewColumn column : columns){            String cellText = row.get(column.dataField);            TextView rowFieldText = (TextView) inflater.inflate(R.layout.ctrl_data_grid_view_cell, dataRow, false);            rowFieldText.setText(cellText);            rowFieldText.setGravity(column.textAlign);            rowFieldText.setTextColor(column.textColor);            rowFieldText.setLayoutParams(new LayoutParams(column.columnWidth, LayoutParams.WRAP_CONTENT, 1));            dataRow.addView(rowFieldText);            if (column.isEnabled) {                rowFieldText.setOnClickListener(new OnClickListener() {                    @Override                    public void onClick(View v) {                        if (cellClickListener != null) {                            cellClickListener.onClick(row, column.dataField);                        }                    }                });            } else {                rowFieldText.setTextColor(Color.rgb(128, 128, 128));            }        }        if (rowValidatorListener != null){            rowValidatorListener.onValidator(dataRow, row);        }        if (index == -1){            bodyRow.addView(dataRow);        }else {            bodyRow.addView(dataRow, index);        }        dataRow.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (rowClickListener != null) {                    rowClickListener.onClick(row);                }            }        });    }    public Map<String,String> getRow(int index) {        return rows.get(index);    }    public int getColumnsCount() {        return columns.size();    }    public int getRowsCount() {        return rows.size();    }    public interface CellClickListener{        void onClick(Map<String,String> rowData, String dataField);    }    public interface RowClickListener{        void onClick(Map<String,String> rowData);    }    public interface RowValidatorListener{        void onValidator(ViewGroup v,Map<String,String> rowData);    }}

The column attribute classes used in the Code are also attached:

public class DataGridViewColumn {    public String dataField;    public String headerText;    public int columnWidth;    public int textAlign;    public int textColor;    public boolean isEnabled;}

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.