概要概要
一部のビジネスシナリオでは、ユーザーエクスペリエンスを向上させるために、前のページの次のページのデータを準備して、ユーザーがフォローアップする時間を短縮する必要がある場合があります。Activityは低結合と高分離で設計されているため、従来のプリロードActivityソリューションは十分にエレガントではありません。現在、レイアウトとページデータをプリロードできるよりエレガントなプリロードソリューションを提供しています。
github:https://github.com/long8313002/PreloadingActivity
結果を示す
使用する
注:ライブラリはKotlin開発を使用するため、プロジェクトでKotlin開発環境を構成する必要があります
ライブラリリファレンス
implementation 'com.zhangzheng.preloading.activity:library:1.0.0'
使用例
val intent = Intent(this,TestActivity::class.java)
intent.putExtra("id",1111)
PreLoading.preLoading(this,intent,TestPreLoadingView::class.java)
textView.setOnClickListener {
startActivity(intent)
}
デフォルトでは、プリロードページが開かれ、ページが破棄されると、プリロードされたインスタンスも破棄されます。次回はレイアウトとデータをリロードする必要があります。プリロードされたデータを保持して複数回再利用する必要がある場合は、次のようにパラメータautoDestroy = falseを設定できます。
PreLoading.preLoading(this,intent,TestPreLoadingView::class.java,false)
ページの実装をプリロードする
さまざまなプロジェクトで使用される基本クラスのアクティビティが異なることを考慮して、汎用性のために、アクティビティは直接カスタマイズされませんが、組み合わせによってそれを実現するためにAbsPreLoadingViewが提供されます。使いやすさのために、Activityから継承された基本クラスがここに提供されています。実際の使用では、次のように、このクラスを参照して独自の基本クラスを実装できます。
デモンストレーション基本クラス
abstract class AbsPreLoadingActivity : Activity() {
abstract fun preLoadingViewClass() : KClass<out AbsPreLoadingView>
private lateinit var preLoadingView: AbsPreLoadingView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
preLoadingView =preLoadingViewClass().getOrCreate(intent, this)
setContentView(preLoadingView)
preLoadingView.callCreate(savedInstanceState)
}
override fun onStart() {
super.onStart()
preLoadingView.callStart()
}
override fun onResume() {
super.onResume()
preLoadingView.callResume()
}
override fun onPause() {
super.onPause()
preLoadingView.callPause()
}
override fun onStop() {
super.onStop()
preLoadingView.callStop()
}
override fun onDestroy() {
super.onDestroy()
preLoadingView.callDestroy()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
preLoadingView.onActivityResult(requestCode, resultCode, data)
}
}
デモンストレーションを使用する
class TestActivity : AbsPreLoadingActivity() {
override fun preLoadingViewClass() = TestPreLoadingView::class
}
class TestPreLoadingView(context: Context) : AbsPreLoadingView(context) {
override fun resId() = R.layout.activity_test_list
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requestTestData(intent?.getIntExtra("id",0)?:0)
}
override fun onResume() {
super.onResume()
}
private fun requestTestData(id:Int){
Thread {
Thread.sleep(1000)
val listData = ArrayList<String>()
listData.add("$id === > 1")
listData.add("$id === > 2")
listData.add("$id === > 3")
listData.add("$id === > 4")
listData.add("$id === > 5")
listData.add("$id === > 6")
listData.add("$id === > 7")
listData.add("$id === > 8")
listData.add("$id === > 9")
listData.add("$id === > 10")
listData.add("$id === > 11")
listData.add("$id === > 12")
Handler(Looper.getMainLooper()).post {
listview.adapter = ArrayAdapter(context,android.R.layout.simple_list_item_1,listData)
}
}.start()
}
}