{"id":21130211,"url":"https://github.com/kaleai/Shatter","last_synced_at":"2025-07-09T01:32:45.327Z","repository":{"id":87855697,"uuid":"42921814","full_name":"kaleai/Shatter","owner":"kaleai","description":"代替fragment的轻量级解耦类，拥有和activity完全一致的生命周期","archived":false,"fork":false,"pushed_at":"2018-08-01T11:18:10.000Z","size":3884,"stargazers_count":460,"open_issues_count":1,"forks_count":80,"subscribers_count":24,"default_branch":"master","last_synced_at":"2024-11-13T22:33:44.618Z","etag":null,"topics":["android","fragments","lifecycle"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kaleai.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-09-22T08:37:50.000Z","updated_at":"2024-05-24T07:15:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"cb5573d0-58db-4ff6-ab90-46e47a49a526","html_url":"https://github.com/kaleai/Shatter","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kaleai%2FShatter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kaleai%2FShatter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kaleai%2FShatter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kaleai%2FShatter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kaleai","download_url":"https://codeload.github.com/kaleai/Shatter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225476373,"owners_count":17480215,"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":["android","fragments","lifecycle"],"created_at":"2024-11-20T05:32:25.658Z","updated_at":"2024-11-20T05:32:33.215Z","avatar_url":"https://github.com/kaleai.png","language":"Java","readme":"# Shatter\n\n[![](https://jitpack.io/v/tianzhijiexian/Shatter.svg)](https://jitpack.io/#tianzhijiexian/Shatter)\n\n[Shatter](https://github.com/tianzhijiexian/Shatter)是一个代替fragment来划分ui模块的库。它主要完成的工作是管理ui区块，并且能和activity保持完全相同的生命周期，没有任何学习成本。\n\nShatter对于单页面多ui模块的结构有着很好的支持，非常适合用来降低复杂activity的复杂度。但因为设计的关系，它的生命周期仅仅被activity触发的，所以不会有完整的生命周期的概念。\n\n所有的监听工作都是通过shatterManager来实现的，这个类将会把activity的方法对应给shatter：\n\n![](http://static.zybuluo.com/shark0017/yui6evs3qghmofoevdxripzo/image_1btm78fhn1inj2mbn8gnunm3a9.png)\n\n*（上图的方法均是一一对应的关系）*\n\n## 引入方式\n\n1.添加JitPack仓库\n\n```\nrepositories {\n    maven {\n        url \"https://jitpack.io\"\n    }\n}\n```\n\n2.添加依赖\n\n\u003e implementation 'com.github.tianzhijiexian:Shatter:[Latest release](https://github.com/tianzhijiexian/Shatter/releases)（\u003c-click）'\n\n\n## 配置方式\n\n配置的方式有两种可选，第一种比较复杂，第二种较为简单。\n\n### 1. 让shatter有监听activity全部生命周期的能力\n\n在app的build.gradle中配置aspectj：\n\n```gradle\napply plugin: 'com.android.application'\n\napply plugin: 'me.leolin.gradle-android-aspectj'\n```\n\n接着在baseActivity实现`IShatterActivity`，并复写你需要被shatter感知的生命周期（无需做任何处理，只需复写即可）,如：\n\n```java\nprivate ShatterManager mShatterManager;\n\npublic ShatterManager getShatterManager() {\n     if (mShatterManager == null) {\n    \tmShatterManager = new ShatterManager(this);\n     }\n     return mShatterManager;\n}\n\n@Override\nprotected void onCreate(@Nullable Bundle savedInstanceState) {\n    super.onCreate(savedInstanceState);\n}\n\n@Override\npublic void onNewIntent(Intent intent) {\n    super.onNewIntent(intent);\n}\n\n@Override\npublic void onSaveInstanceState(Bundle outState) {\n    super.onSaveInstanceState(outState);\n}\n\n// ...\n\n```\n\n### 2. 仅仅需要监听部分生命周期\n\n在baseActivity中的onCreate()中写上如下语句：\n\n```java\nprivate ShatterManager mShatterManager;\n\npublic ShatterManager getShatterManager() {\n     if (mShatterManager == null) {\n    \tmShatterManager = new ShatterManager(this);\n     }\n     return mShatterManager;\n}\n\n@Override\nprotected void onCreate(@Nullable Bundle savedInstanceState) {\n    super.onCreate(savedInstanceState);\n    EventDispatchFragment.injectIfNeededIn(this);\n}\n```\n\n这种方式下的shatter可拥有如下生命周期：\n\n- onRestoreInstanceState\n- onStart\n- onResume\n- onPause\n- onStop\n- onDestroy\n- onActivityResult\n- onSaveInstanceState\n\n## 使用\n\n定义一个shatter：\n\n```java\npublic static class MyShatter extends Shatter {\n\n    private TextView mTopTv;\n    \n    @Override\n    protected int getLayoutResId() {\n        return android.R.layout.my_shatter;\n    }\n\n    @Override\n    public void bindViews(View rootView) {\n        mTopTv = findViewById(R.id.top_tv);\n    }\n\n    @Override\n    public void setViews() {\n        View root = getRootView();\n        root.setBackgroundResource(R.drawable.shatter_green_bg);\n        \n        TextView textView = mTopTv;\n        textView.setGravity(Gravity.CENTER);\n        textView.setText(R.string.test_text);\n    }\n\n}\n```\n\n方式一：在activity中添加这个shatter：\n\n```java\n@Override\nprotected void onCreate(Bundle savedInstanceState) {\n    super.onCreate(savedInstanceState);\n    setContentView(R.layout.main_activity);\n\n    getShatterManager().add(R.id.root_container, new MyShatter());\n}\n```\n\n方式二：在shatter中添加一个shatter（支持多重嵌套）：\n\n```java\npublic class MiddleShatter extends Shatter {\n\n    @Override\n    protected int getLayoutResId() {\n        return R.layout.middle_shatter;\n    }\n\n    @Override\n    public void bindViews(View rootView) {\n    \n        getShatterManager().add(R.id.inner_fl, new InnerShatter());\n    }\n\n}\n```\n\n## 效果\n\n![多个shatter组合完成一个界面](http://static.zybuluo.com/shark0017/6fppkvftlr2ph71zwhgfn29y/image_1cjqjabckva01c3q16af1ajv9lv5b.png)\n\n## 额外说明\n\n1. Shatter自身会产生事件，如果要和activity进行交互，那么可以通过activity给shatter设置listener的方式来做。\n\n2. ShatterManager提供了`findShatterByTag()`和`findShatterByContainViewId()`，可以通过二者来查找shatter，方便解耦。\n\n3. 如果你需要在viewPager中使用shatter，那么可以“选用”`shatterPagerAdapter`来做。\n\n### 开发者\n![](https://avatars3.githubusercontent.com/u/9552155?v=3\u0026s=460)\n\nJack Tony: \u003cdeveloper_kale@foxmail.com\u003e\n\n### License\n\n    Copyright 2016-2019 Jack Tony\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","funding_links":[],"categories":["Libs"],"sub_categories":["\u003cA NAME=\"Widget\"\u003e\u003c/A\u003eWidget"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkaleai%2FShatter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkaleai%2FShatter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkaleai%2FShatter/lists"}