{"id":13642624,"url":"https://github.com/zhouchaoyuan/excelPanel","last_synced_at":"2025-04-20T20:32:25.980Z","repository":{"id":41883516,"uuid":"79038108","full_name":"zhouchaoyuan/excelPanel","owner":"zhouchaoyuan","description":"An Android's two-dimensional RecyclerView. Not only can load historical data, but also can load future data.","archived":false,"fork":false,"pushed_at":"2023-06-14T03:29:17.000Z","size":7849,"stargazers_count":2420,"open_issues_count":29,"forks_count":347,"subscribers_count":40,"default_branch":"master","last_synced_at":"2025-04-07T14:07:45.817Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zhouchaoyuan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2017-01-15T14:36:50.000Z","updated_at":"2025-02-24T09:32:13.000Z","dependencies_parsed_at":"2022-08-11T20:01:16.651Z","dependency_job_id":"79024e97-636e-4491-825b-7a1e61c46b24","html_url":"https://github.com/zhouchaoyuan/excelPanel","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhouchaoyuan%2FexcelPanel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhouchaoyuan%2FexcelPanel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhouchaoyuan%2FexcelPanel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhouchaoyuan%2FexcelPanel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zhouchaoyuan","download_url":"https://codeload.github.com/zhouchaoyuan/excelPanel/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248960762,"owners_count":21189988,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T01:01:34.053Z","updated_at":"2025-04-20T20:32:24.017Z","avatar_url":"https://github.com/zhouchaoyuan.png","language":"Java","readme":"# excelPanel\nA two-dimensional RecyclerView. Not only can load historical data, but also can load future data.\n\n![demo_gif](https://raw.githubusercontent.com/zhouchaoyuan/excelPanel/master/app/src/main/assets/roomFormDemo.gif)\n![demo_gif_adjust_height](https://raw.githubusercontent.com/zhouchaoyuan/excelPanel/master/app/src/main/assets/roomFormDemoAdjustHeight.gif)\n\n# Including in your project\n\n```xml\ncompile 'cn.zhouchaoyuan:excelpanel:1.0.5'\n```\n\n# Usage\n\n### 1、Write in xml\n\n```xml\n\u003ccn.zhouchaoyuan.excelpanel.ExcelPanel\n        android:id=\"@+id/content_container\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        app:left_cell_width=\"@dimen/room_status_cell_length\"\n        app:normal_cell_width=\"@dimen/room_status_cell_length\"\n        app:top_cell_height=\"@dimen/room_status_cell_length\" /\u003e\n```\n\nConfigure using xml attributes\n\n```xml\n\napp:left_cell_width     //left header cell's width, not support wrap_content\napp:normal_cell_width   //container cell's width, not support wrap_content\napp:top_cell_height     //top header cell's height, not support wrap_content\n\n```\n\n\n### 2、Define your Custom Adapter\nYour adapter must extends BaseExcelPanelAdapter and override seven methods show as follow:\n\n```java\npublic class Adapter extends BaseExcelPanelAdapter\u003cRowTitle, ColTitle, Cell\u003e{\n\n    public Adapter(Context context) {\n        super(context);\n    }\n\n    //=========================================normal cell=========================================\n    @Override\n    public RecyclerView.ViewHolder onCreateCellViewHolder(ViewGroup parent, int viewType) {\n        return null;\n    }\n\n    @Override\n    public void onBindCellViewHolder(RecyclerView.ViewHolder holder, int verticalPosition, int horizontalPosition) {\n\n    }\n\n    //=========================================top cell===========================================\n    @Override\n    public RecyclerView.ViewHolder onCreateTopViewHolder(ViewGroup parent, int viewType) {\n        return null;\n    }\n\n    @Override\n    public void onBindTopViewHolder(RecyclerView.ViewHolder holder, int position) {\n\n    }\n\n    //=========================================left cell===========================================\n    @Override\n    public RecyclerView.ViewHolder onCreateLeftViewHolder(ViewGroup parent, int viewType) {\n        return null;\n    }\n\n    @Override\n    public void onBindLeftViewHolder(RecyclerView.ViewHolder holder, int position) {\n\n    }\n\n    //=========================================top left cell=======================================\n    @Override\n    public View onCreateTopLeftView() {\n        return null;\n    }\n}\n```\n\n### 3、Use your Adapter\n\n```java\n//==============================\nprivate List\u003cRowTitle\u003e rowTitles;\nprivate List\u003cColTitle\u003e colTitles;\nprivate List\u003cList\u003cCell\u003e\u003e cells;\nprivate ExcelPanel excelPanel;\nprivate CustomAdapter adapter;\nprivate View.OnClickListener blockListener\n//..........................................\nexcelPanel = (ExcelPanel) findViewById(R.id.content_container);\nadapter = new CustomAdapter(this, blockListener);\nexcelPanel.setAdapter(adapter);\nexcelPanel.setOnLoadMoreListener(this);//your Activity or Fragment implement ExcelPanel.OnLoadMoreListener\nadapter.setAllData(colTitles, rowTitles, cells);\nadapter.enableFooter();//load more, you can also call disableFooter()----default\nadapter.enableHeader();//load history, you can also call disableHeader()----default\n```\n\nIf using setOnLoadMoreListener(...) and enableHeader() you must call addHistorySize(int) to tell ExcelPanel how many data have been added.\n\n# ChangeLog\n\n- V1.0.1--------------Line i can be different to line i+1, but the same line's height must be equals\n- V1.0.2--------------Support different viewType which using to config different row with different height\n- V1.0.3--------------Remove adjust height, fix bug when excelPanel in ViewPager\n- V1.0.4--------------Optimizing rolling\n- V1.0.5--------------addOnScrollListener\n\n# License\n\n```xml\n\n   Copyright 2017 zhouchaoyuan\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n```","funding_links":[],"categories":["表格(Table)"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhouchaoyuan%2FexcelPanel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzhouchaoyuan%2FexcelPanel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhouchaoyuan%2FexcelPanel/lists"}