同步操作将从 许清泉/Scaffold 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
在项目目录下的build.gradle中的allprojects下的repositories里面添加
maven {
url "https://jitpack.io"
}
然后再项目module下的build.gradle中dependencies里添加
AndroidX:
implementation 'com.github.xuqingquan1995:Scaffold:2.0.0'
support:
implementation 'com.github.xuqingquan1995:Scaffold:2.0.0-support'
1. git clone https://github.com/xuqingquan1995/Scaffold.git
2. 在自己项目中选择File->New->Import Module 选择clone下来的工程中的scaffold模块
3. 复制clone下来的Scaffold目录下的version.gradle到自己的项目中
4. 在工程目录下的build.gradle最上面添加 apply from: 'version.gradle'
5. 在自己工程模块中的build.gradle中dependencies里添加 implementation project(path: ':scaffold')
将Scaffold作为子模块添加到自己项目中,方法大致与作为module引用相似
新建一个App,继承于Application
class App : Application() {
//已经通过ContentProvider方式初始化,这边的初始化可以不用了
private lateinit var mAppDelegate: AppLifecycles
override fun attachBaseContext(base: Context?) {
super.attachBaseContext(base)
mAppDelegate = AppDelegate.getInstance(base!!)
}
override fun onCreate() {
super.onCreate()
//生命周期初始化
mAppDelegate.onCreate(this)
//配置初始化
ScaffoldConfig.getInstance(this)
.setBaseUrl("https://api.douban.com")
.setLevel(Level.NONE)
}
override fun onTerminate() {
super.onTerminate()
mAppDelegate.onTerminate(this)
}
}
新建一个Activity
继承于SimpleActivity
,实现SimpleActivity
里面的抽象方法
class MainActivity : SimpleActivity() {
override fun getLayoutId(): Int {
return R.layout.activity_main
}
override fun initData(savedInstanceState: Bundle?) {
}
}
新建一个Fragment
继承于SimpleFragment
,实现里面的抽象方法
class MainFragment : SimpleFragment() {
override fun getLayoutId(): Int {
return R.layout.fragment_main
}
override fun initView(view: View) {
}
override fun initData(savedInstanceState: Bundle?) {
}
}
Scaffold有封装了RecyclerView的Adapter,包括最简单的SimpleRecyclerAdapter
,SimplePagedListAdapter
,SimpleListAdapter
以及添加了默认的网络状态处理的BasePagedListAdapter
,BaseListAdapter
SimpleRecyclerAdapter
可以持有数据源,适合需要对数据进行修改的时候使用,其余均不持有数据源
SimplePagedListAdapter
,BasePagedListAdapter
适合在使用Paging加载数据的时候使用
SimpleListAdapter
,BaseListAdapter
适合在不需要对数据进行修改的情况下使用,因为没有办法获取到数据源
以上Adapter为方便扩展,都不是使用抽象类,所以可以按需覆写父类里面的函数,正常情况下都需要覆写getLayoutRes
和setData
方法
/**
* @param viewType 不同的视图类型
* @return 返回布局id
*/
override fun getLayoutRes(viewType: Int) = R.layout.item
/**
* @param holder 默认的ViewHolder,可以通过holder.getView<TextView>(R.id.text)获取item中的控件
* @param data 当前item的数据
* @param position 当前item的position
*/
override fun setData(holder: BaseViewHolder<Subjects>, data: Subjects?, position: Int) {
}
以上Adapter都需要传入一个泛型,作为每个item的类型,对于有多个数据类型的情况下,可以直接传入一个Any,然后根据itemViewType和数据类型判断
如果Adapter中需要处理点击事件,可以按照需要覆写onClick
或onLongClick
,如果adapter需要更Activity
或者Fragment
中的控件交互,也可以在Activity
或Fragment
里面设置Listener
adapter.listener = object : SimplePagedListAdapter.OnViewClickListener<Subjects>() {
override fun onClick(view: View, position: Int, data: Subjects?, viewType: Int) {
}
}
在Activity
和Fragment
里面均有封装了launch
函数,可以方便的使用协程,以下是一个网络请求的示例
launch {
val top250 = ScaffoldConfig.getRepositoryManager()
.obtainRetrofitService(DoubanService::class.java)
.top250("xxx", 1, 20)
toast(top250.toString())
}
由于使用协程,并且很好的处理了各种相关生命周期相关问题以及线程间切换的问题,可以不再需要进行麻烦的协程切换操作,从上面可以看到,同一个代码块中,即处理了网络请求,还使用了toast
欢迎Star
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。