From 8a237a11560d877093b88d2673cdcf022157d866 Mon Sep 17 00:00:00 2001 From: luyao Date: Tue, 9 Jul 2019 16:13:12 +0800 Subject: [PATCH] add ActivityExt --- app/src/main/AndroidManifest.xml | 2 + .../main/java/luyao/util/ktx/MainActivity.kt | 5 +- .../luyao/util/ktx/ui/ActivityExtActivity.kt | 67 ++++++++++++++++++ .../java/luyao/util/ktx/ui/AnotherActivity.kt | 34 +++++++++ .../java/luyao/util/ktx/ui/ExtActivity.kt | 1 + .../main/res/layout/activity_activity_ext.xml | 34 +++++++++ app/src/main/res/layout/activity_another.xml | 19 +++++ .../java/luyao/util/ktx/ext/ActivityExt.kt | 70 +++++++++++++++++++ .../main/java/luyao/util/ktx/ext/LogExt.kt | 10 +-- 9 files changed, 235 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/luyao/util/ktx/ui/ActivityExtActivity.kt create mode 100644 app/src/main/java/luyao/util/ktx/ui/AnotherActivity.kt create mode 100644 app/src/main/res/layout/activity_activity_ext.xml create mode 100644 app/src/main/res/layout/activity_another.xml create mode 100644 ktx/src/main/java/luyao/util/ktx/ext/ActivityExt.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2a9fd54..254dd70 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -31,6 +31,8 @@ + + \ No newline at end of file diff --git a/app/src/main/java/luyao/util/ktx/MainActivity.kt b/app/src/main/java/luyao/util/ktx/MainActivity.kt index c21ba7f..dbb5c6f 100644 --- a/app/src/main/java/luyao/util/ktx/MainActivity.kt +++ b/app/src/main/java/luyao/util/ktx/MainActivity.kt @@ -3,6 +3,7 @@ package luyao.util.ktx import kotlinx.android.synthetic.main.activity_main.* import luyao.ktx.R import luyao.util.ktx.base.BaseActivity +import luyao.util.ktx.ext.startKtxActivity import luyao.util.ktx.mvvm.MvvmActivity import luyao.util.ktx.ui.ExtActivity @@ -13,7 +14,7 @@ class MainActivity : BaseActivity() { override fun initView() {} override fun initData() { - btMvvm.setOnClickListener { startActivity(MvvmActivity::class.java) } - btExt.setOnClickListener { startActivity(ExtActivity::class.java) } + btMvvm.setOnClickListener { startKtxActivity() } + btExt.setOnClickListener { startKtxActivity()} } } diff --git a/app/src/main/java/luyao/util/ktx/ui/ActivityExtActivity.kt b/app/src/main/java/luyao/util/ktx/ui/ActivityExtActivity.kt new file mode 100644 index 0000000..f197bf6 --- /dev/null +++ b/app/src/main/java/luyao/util/ktx/ui/ActivityExtActivity.kt @@ -0,0 +1,67 @@ +package luyao.util.ktx.ui + +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import kotlinx.android.synthetic.main.activity_activity_ext.* +import kotlinx.android.synthetic.main.title_layout.* +import luyao.ktx.R +import luyao.util.ktx.base.BaseActivity +import luyao.util.ktx.ext.startKtxActivity +import luyao.util.ktx.ext.startKtxActivityForResult +import luyao.util.ktx.ext.toast + +/** + * Created by luyao + * on 2019/7/9 14:29 + */ +class ActivityExtActivity : BaseActivity() { + override fun getLayoutResId() = R.layout.activity_activity_ext + + override fun initView() { + mToolbar.title = "ActivityExt" + } + + override fun initData() { + startActivity.setOnClickListener { + startKtxActivity() + } + + startActivityWithFlag.setOnClickListener { + startKtxActivity(Intent.FLAG_ACTIVITY_NEW_TASK) + } + + startActivityForResult.setOnClickListener { + startKtxActivityForResult(requestCode = 1024) + } + + startActivityWithValue.setOnClickListener { + startKtxActivity( + values = arrayListOf( + "int" to 1, + "boolean" to true, + "string" to "from previous activity" + ) + ) + } + + startActivityWithBundle.setOnClickListener { + startKtxActivity( + extra = Bundle().apply { + putInt("int",2) + putBoolean("boolean",true) + putString("string","from bundle") + } + ) + } + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + + if ((resultCode == Activity.RESULT_OK) and (requestCode == 1024)) { + toast("onActivityResult") + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/luyao/util/ktx/ui/AnotherActivity.kt b/app/src/main/java/luyao/util/ktx/ui/AnotherActivity.kt new file mode 100644 index 0000000..f071042 --- /dev/null +++ b/app/src/main/java/luyao/util/ktx/ui/AnotherActivity.kt @@ -0,0 +1,34 @@ +package luyao.util.ktx.ui + +import android.app.Activity +import kotlinx.android.synthetic.main.activity_another.* +import kotlinx.android.synthetic.main.title_layout.* +import luyao.ktx.R +import luyao.util.ktx.base.BaseActivity +import luyao.util.ktx.ext.toast + +/** + * Created by luyao + * on 2019/7/9 14:32 + */ +class AnotherActivity : BaseActivity() { + + private val int by lazy { intent.getIntExtra("int", 0) } + private val boolean by lazy { intent.getBooleanExtra("boolean", false) } + private val string by lazy { intent.getStringExtra("string") } + + override fun getLayoutResId() = R.layout.activity_another + + override fun initView() { + mToolbar.title = "AnotherActivity" + + toast("$int\n$boolean\n$string") + } + + override fun initData() { + finish.setOnClickListener { + setResult(Activity.RESULT_OK) + finish() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/luyao/util/ktx/ui/ExtActivity.kt b/app/src/main/java/luyao/util/ktx/ui/ExtActivity.kt index 0baa23d..a105a5f 100644 --- a/app/src/main/java/luyao/util/ktx/ui/ExtActivity.kt +++ b/app/src/main/java/luyao/util/ktx/ui/ExtActivity.kt @@ -12,6 +12,7 @@ class ExtActivity : CommonListActivity() { override fun initList() { dataList.run { + add(ItemBean("ActivityExt",ActivityExtActivity::class.java)) add(ItemBean("ToastExt", ToastExtActivity::class.java)) add(ItemBean("AppExt", ToastExtActivity::class.java)) add(ItemBean("IntentExt", IntentExtActivity::class.java)) diff --git a/app/src/main/res/layout/activity_activity_ext.xml b/app/src/main/res/layout/activity_activity_ext.xml new file mode 100644 index 0000000..6dc38e3 --- /dev/null +++ b/app/src/main/res/layout/activity_activity_ext.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_another.xml b/app/src/main/res/layout/activity_another.xml new file mode 100644 index 0000000..9922365 --- /dev/null +++ b/app/src/main/res/layout/activity_another.xml @@ -0,0 +1,19 @@ + + + + + + + + + + \ No newline at end of file diff --git a/ktx/src/main/java/luyao/util/ktx/ext/ActivityExt.kt b/ktx/src/main/java/luyao/util/ktx/ext/ActivityExt.kt new file mode 100644 index 0000000..3100f7f --- /dev/null +++ b/ktx/src/main/java/luyao/util/ktx/ext/ActivityExt.kt @@ -0,0 +1,70 @@ +package luyao.util.ktx.ext + +import android.app.Activity +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.os.Parcelable +import java.io.Serializable + +/** + * Created by luyao + * on 2019/7/9 14:17 + */ +inline fun Activity.startKtxActivity(flags: Int? = null, extra: Bundle? = null): Unit = + startActivity(getIntent(flags, extra)) + +inline fun Activity.startKtxActivity(flags: Int? = null, extra: Bundle?=null,values: List?>?): Unit = + startActivity(getIntent(flags, extra,values)) + +inline fun Activity.startKtxActivityForResult( + requestCode: Int, + flags: Int? = null, + extra: Bundle? = null +): Unit = + startActivityForResult(getIntent(flags, extra), requestCode) + +inline fun Activity.getIntent(flags: Int?, extra: Bundle?): Intent = + Intent(this, T::class.java).apply { + flags?.let { setFlags(flags) } + extra?.let { putExtras(extra) } + } + +inline fun Activity.getIntent(flags: Int?, extra: Bundle?, pairs: List?>?): Intent = + Intent(this, T::class.java).apply { + flags?.let { setFlags(flags) } + extra?.let { putExtras(extra) } + if (pairs != null) { + for (pair in pairs) + pair?.let { + val name = pair.first + when (val value = pair.second) { + is Int -> putExtra(name, value) + is Byte -> putExtra(name, value) + is Char -> putExtra(name, value) + is Short -> putExtra(name, value) + is Boolean -> putExtra(name, value) + is Long -> putExtra(name, value) + is Float -> putExtra(name, value) + is Double -> putExtra(name, value) + is String -> putExtra(name, value) + is CharSequence -> putExtra(name, value) + is Parcelable -> putExtra(name, value) + is Array<*> -> putExtra(name, value) + is ArrayList<*> -> putExtra(name, value) + is Serializable -> putExtra(name, value) + is BooleanArray -> putExtra(name, value) + is ByteArray -> putExtra(name, value) + is ShortArray -> putExtra(name, value) + is CharArray -> putExtra(name, value) + is IntArray -> putExtra(name, value) + is LongArray -> putExtra(name, value) + is FloatArray -> putExtra(name, value) + is DoubleArray -> putExtra(name, value) + is Bundle -> putExtra(name, value) + is Intent -> putExtra(name, value) + else -> {} + } + } + } + } \ No newline at end of file diff --git a/ktx/src/main/java/luyao/util/ktx/ext/LogExt.kt b/ktx/src/main/java/luyao/util/ktx/ext/LogExt.kt index 67c77a5..8c5c239 100644 --- a/ktx/src/main/java/luyao/util/ktx/ext/LogExt.kt +++ b/ktx/src/main/java/luyao/util/ktx/ext/LogExt.kt @@ -13,11 +13,11 @@ private enum class LEVEL { V, D, I, W, E } -fun String.v(tag: String = TAG, message: String) = log(LEVEL.V, tag, message) -fun String.d(tag: String = TAG, message: String) = log(LEVEL.D, tag, message) -fun String.i(tag: String = TAG, message: String) = log(LEVEL.I, tag, message) -fun String.w(tag: String = TAG, message: String) = log(LEVEL.W, tag, message) -fun String.e(tag: String = TAG, message: String) = log(LEVEL.E, tag, message) +fun String.v(tag: String = TAG) = log(LEVEL.V, tag, this) +fun String.d(tag: String = TAG) = log(LEVEL.D, tag, this) +fun String.i(tag: String = TAG) = log(LEVEL.I, tag, this) +fun String.w(tag: String = TAG) = log(LEVEL.W, tag, this) +fun String.e(tag: String = TAG) = log(LEVEL.E, tag, this) private fun log(level: LEVEL, tag: String, message: String) { when (level) {