diff --git a/app/build.gradle b/app/build.gradle
index 27ef2da..d676582 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -29,7 +29,9 @@ dependencies {
implementation 'androidx.core:core-ktx:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
- androidTestImplementation 'androidx.test:runner:1.1.1'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
+ androidTestImplementation 'androidx.test:runner:1.2.0'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
+ implementation 'com.google.android.material:material:1.1.0-alpha07'
+ implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.45-androidx'
implementation project(path: ':library')
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 98678d8..3becad3 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,5 +1,6 @@
+ android:theme="@style/AppTheme"
+ tools:ignore="GoogleAppIndexingWarning">
@@ -17,6 +19,7 @@
+
\ 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 8d5d6be..c21ba7f 100644
--- a/app/src/main/java/luyao/util/ktx/MainActivity.kt
+++ b/app/src/main/java/luyao/util/ktx/MainActivity.kt
@@ -2,8 +2,9 @@ package luyao.util.ktx
import kotlinx.android.synthetic.main.activity_main.*
import luyao.ktx.R
-import luyao.ktx.base.BaseActivity
+import luyao.util.ktx.base.BaseActivity
import luyao.util.ktx.mvvm.MvvmActivity
+import luyao.util.ktx.ui.ExtActivity
class MainActivity : BaseActivity() {
@@ -13,5 +14,6 @@ class MainActivity : BaseActivity() {
override fun initData() {
btMvvm.setOnClickListener { startActivity(MvvmActivity::class.java) }
+ btExt.setOnClickListener { startActivity(ExtActivity::class.java) }
}
}
diff --git a/app/src/main/java/luyao/util/ktx/adapter/CommonAdapter.kt b/app/src/main/java/luyao/util/ktx/adapter/CommonAdapter.kt
new file mode 100644
index 0000000..ed815a8
--- /dev/null
+++ b/app/src/main/java/luyao/util/ktx/adapter/CommonAdapter.kt
@@ -0,0 +1,16 @@
+package luyao.util.ktx.adapter
+
+import com.chad.library.adapter.base.BaseQuickAdapter
+import com.chad.library.adapter.base.BaseViewHolder
+import luyao.ktx.R
+
+/**
+ * Created by luyao
+ * on 2019/6/10 10:57
+ */
+class CommonAdapter(layoutResId: Int = R.layout.item_common) : BaseQuickAdapter(layoutResId) {
+
+ override fun convert(helper: BaseViewHolder, item: String) {
+ helper.setText(R.id.itemTv, item)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/luyao/util/ktx/mvvm/MvvmActivity.kt b/app/src/main/java/luyao/util/ktx/mvvm/MvvmActivity.kt
index a0b5f1b..f1c673a 100644
--- a/app/src/main/java/luyao/util/ktx/mvvm/MvvmActivity.kt
+++ b/app/src/main/java/luyao/util/ktx/mvvm/MvvmActivity.kt
@@ -4,8 +4,8 @@ import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.Observer
import kotlinx.android.synthetic.main.activity_mvvm_demo.*
import luyao.ktx.R
-import luyao.ktx.base.BaseVMActivity
-import luyao.ktx.ext.toast
+import luyao.util.ktx.base.BaseVMActivity
+import luyao.util.ktx.ext.toast
/**
* Created by luyao
diff --git a/app/src/main/java/luyao/util/ktx/mvvm/MvvmModel.kt b/app/src/main/java/luyao/util/ktx/mvvm/MvvmModel.kt
index 6145d1a..57972d0 100644
--- a/app/src/main/java/luyao/util/ktx/mvvm/MvvmModel.kt
+++ b/app/src/main/java/luyao/util/ktx/mvvm/MvvmModel.kt
@@ -1,12 +1,10 @@
package luyao.util.ktx.mvvm
-import androidx.lifecycle.Lifecycle
-import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.MutableLiveData
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.delay
-import luyao.ktx.base.BaseViewModel
+import luyao.util.ktx.base.BaseViewModel
/**
* Created by luyao
diff --git a/app/src/main/java/luyao/util/ktx/ui/ExtActivity.kt b/app/src/main/java/luyao/util/ktx/ui/ExtActivity.kt
new file mode 100644
index 0000000..cf4115f
--- /dev/null
+++ b/app/src/main/java/luyao/util/ktx/ui/ExtActivity.kt
@@ -0,0 +1,53 @@
+package luyao.util.ktx.ui
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentPagerAdapter
+import kotlinx.android.synthetic.main.activity_ext.*
+import luyao.ktx.R
+import luyao.util.ktx.base.BaseActivity
+import luyao.util.ktx.ui.fragment.ContextExtFragment
+
+/**
+ * Created by luyao
+ * on 2019/6/10 10:00
+ */
+class ExtActivity : BaseActivity() {
+
+ private val titleList = arrayOf("Context", "String")
+ private val fragmentList = arrayListOf()
+
+ private val contextExtFragment = ContextExtFragment()
+ private val stringExtFragment = ContextExtFragment()
+
+
+ override fun getLayoutResId() = R.layout.activity_ext
+
+ init {
+ fragmentList.add(contextExtFragment)
+ fragmentList.add(stringExtFragment)
+ }
+
+ override fun initView() {
+ mToolbar.run {
+ title = "扩展函数"
+ setNavigationIcon(R.drawable.arrow_back)
+ }
+
+ initViewPager()
+ }
+
+ override fun initData() {
+ }
+
+ private fun initViewPager() {
+ extViewPager.adapter =
+ object : FragmentPagerAdapter(supportFragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+ override fun getItem(position: Int) = fragmentList[position]
+
+ override fun getCount() = fragmentList.size
+
+ override fun getPageTitle(position: Int) = titleList[position]
+ }
+ extTabLayout.setupWithViewPager(extViewPager)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/luyao/util/ktx/ui/fragment/CommonFragment.kt b/app/src/main/java/luyao/util/ktx/ui/fragment/CommonFragment.kt
new file mode 100644
index 0000000..e68fa53
--- /dev/null
+++ b/app/src/main/java/luyao/util/ktx/ui/fragment/CommonFragment.kt
@@ -0,0 +1,37 @@
+package luyao.util.ktx.ui.fragment
+
+import androidx.recyclerview.widget.LinearLayoutManager
+import kotlinx.android.synthetic.main.fragment_context_ext.*
+import luyao.ktx.R
+import luyao.util.ktx.adapter.CommonAdapter
+import luyao.util.ktx.base.BaseFragment
+
+/**
+ * Created by luyao
+ * on 2019/6/10 13:18
+ */
+abstract class CommonFragment : BaseFragment() {
+
+ open val dataList = ArrayList()
+ private val commonAdapter by lazy { CommonAdapter() }
+
+ override fun getLayoutResId() = R.layout.fragment_context_ext
+
+ override fun initView() {
+ commonAdapter.setOnItemClickListener { _, _, position ->
+ handleClick(position)
+ }
+ recycleView.run {
+ layoutManager = LinearLayoutManager(context)
+ adapter = commonAdapter
+ }
+ }
+
+ override fun initData() {
+ fillList()
+ commonAdapter.setNewData(dataList)
+ }
+
+ abstract fun fillList()
+ abstract fun handleClick(position: Int)
+}
\ No newline at end of file
diff --git a/app/src/main/java/luyao/util/ktx/ui/fragment/ContextExtFragment.kt b/app/src/main/java/luyao/util/ktx/ui/fragment/ContextExtFragment.kt
new file mode 100644
index 0000000..7183dc3
--- /dev/null
+++ b/app/src/main/java/luyao/util/ktx/ui/fragment/ContextExtFragment.kt
@@ -0,0 +1,25 @@
+package luyao.util.ktx.ui.fragment
+
+import luyao.util.ktx.ext.getVersionName
+import luyao.util.ktx.ext.toast
+
+/**
+ * Created by luyao
+ * on 2019/6/10 10:46
+ */
+class ContextExtFragment : CommonFragment() {
+
+ override fun fillList() {
+ dataList.add("toast")
+ dataList.add("getVersionName")
+ }
+
+ override fun handleClick(position: Int) {
+ context?.run {
+ when (position) {
+ 0 -> toast("I'am a short toast!")
+ 1 -> toast(getVersionName())
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/arrow_back.xml b/app/src/main/res/drawable/arrow_back.xml
new file mode 100644
index 0000000..5a52737
--- /dev/null
+++ b/app/src/main/res/drawable/arrow_back.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_ext.xml b/app/src/main/res/layout/activity_ext.xml
new file mode 100644
index 0000000..bdda80b
--- /dev/null
+++ b/app/src/main/res/layout/activity_ext.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index cb3836b..2b4a04d 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -6,7 +6,7 @@
android:layout_height="match_parent"
tools:context="luyao.util.ktx.MainActivity"
android:orientation="vertical"
- android:gravity="center_horizontal">
+ android:gravity="center">
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_context_ext.xml b/app/src/main/res/layout/fragment_context_ext.xml
new file mode 100644
index 0000000..5a8d214
--- /dev/null
+++ b/app/src/main/res/layout/fragment_context_ext.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_common.xml b/app/src/main/res/layout/item_common.xml
new file mode 100644
index 0000000..37b14df
--- /dev/null
+++ b/app/src/main/res/layout/item_common.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/title_layout.xml b/app/src/main/res/layout/title_layout.xml
new file mode 100644
index 0000000..c7abdd9
--- /dev/null
+++ b/app/src/main/res/layout/title_layout.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 69b2233..5600611 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -3,4 +3,5 @@
#008577
#00574B
#D81B60
+ #e0e0e0
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 5885930..0bf40a7 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -1,11 +1,15 @@
-
+
+
diff --git a/build.gradle b/build.gradle
index b39ac10..af61924 100644
--- a/build.gradle
+++ b/build.gradle
@@ -19,7 +19,7 @@ allprojects {
repositories {
google()
jcenter()
-
+ maven { url "https://jitpack.io" }
}
}
diff --git a/library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml
index ef98331..adcf326 100644
--- a/library/src/main/AndroidManifest.xml
+++ b/library/src/main/AndroidManifest.xml
@@ -1,2 +1,2 @@
+ package="luyao.util.ktx"/>
diff --git a/library/src/main/java/luyao/ktx/ext/ContextExt.kt b/library/src/main/java/luyao/ktx/ext/ContextExt.kt
deleted file mode 100644
index 3f545a7..0000000
--- a/library/src/main/java/luyao/ktx/ext/ContextExt.kt
+++ /dev/null
@@ -1,27 +0,0 @@
-package luyao.ktx.ext
-
-import android.content.Context
-import android.widget.Toast
-import androidx.annotation.StringRes
-
-/**
- * Created by luyao
- * on 2019/5/31 16:42
- */
-
-var showToast: Toast? = null
-
-fun Context.toast(content: String, duration: Int = Toast.LENGTH_SHORT) {
- showToast?.apply {
- setText(content)
- show()
- } ?: run {
- Toast.makeText(this.applicationContext, content, Toast.LENGTH_SHORT).apply {
- showToast = this
- }.show()
- }
-}
-
-fun Context.toast(@StringRes id: Int, duration: Int = Toast.LENGTH_SHORT) {
- toast(getString(id), duration)
-}
diff --git a/library/src/main/java/luyao/ktx/base/BaseActivity.kt b/library/src/main/java/luyao/util/ktx/base/BaseActivity.kt
similarity index 96%
rename from library/src/main/java/luyao/ktx/base/BaseActivity.kt
rename to library/src/main/java/luyao/util/ktx/base/BaseActivity.kt
index 88b28db..a153844 100644
--- a/library/src/main/java/luyao/ktx/base/BaseActivity.kt
+++ b/library/src/main/java/luyao/util/ktx/base/BaseActivity.kt
@@ -1,4 +1,4 @@
-package luyao.ktx.base
+package luyao.util.ktx.base
import android.content.Intent
import android.os.Bundle
diff --git a/library/src/main/java/luyao/util/ktx/base/BaseFragment.kt b/library/src/main/java/luyao/util/ktx/base/BaseFragment.kt
new file mode 100644
index 0000000..be2bbf9
--- /dev/null
+++ b/library/src/main/java/luyao/util/ktx/base/BaseFragment.kt
@@ -0,0 +1,29 @@
+package luyao.util.ktx.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+
+/**
+ * Created by luyao
+ * on 2019/6/10 10:47
+ */
+abstract class BaseFragment : androidx.fragment.app.Fragment() {
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ return inflater.inflate(getLayoutResId(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ initView()
+ initData()
+ super.onViewCreated(view, savedInstanceState)
+ }
+
+ abstract fun getLayoutResId(): Int
+
+ abstract fun initView()
+
+ abstract fun initData()
+}
\ No newline at end of file
diff --git a/library/src/main/java/luyao/ktx/base/BaseVMActivity.kt b/library/src/main/java/luyao/util/ktx/base/BaseVMActivity.kt
similarity index 96%
rename from library/src/main/java/luyao/ktx/base/BaseVMActivity.kt
rename to library/src/main/java/luyao/util/ktx/base/BaseVMActivity.kt
index 6a7bb7a..9b72b7a 100644
--- a/library/src/main/java/luyao/ktx/base/BaseVMActivity.kt
+++ b/library/src/main/java/luyao/util/ktx/base/BaseVMActivity.kt
@@ -1,4 +1,4 @@
-package luyao.ktx.base
+package luyao.util.ktx.base
import android.os.Bundle
import androidx.lifecycle.LifecycleObserver
diff --git a/library/src/main/java/luyao/util/ktx/base/BaseVMFragment.kt b/library/src/main/java/luyao/util/ktx/base/BaseVMFragment.kt
new file mode 100644
index 0000000..24a8dc9
--- /dev/null
+++ b/library/src/main/java/luyao/util/ktx/base/BaseVMFragment.kt
@@ -0,0 +1,49 @@
+package luyao.util.ktx.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.lifecycle.ViewModelProviders
+
+/**
+ * Created by luyao
+ * on 2019/6/10 10:48
+ */
+abstract class BaseVMFragment : androidx.fragment.app.Fragment() {
+
+ protected lateinit var mViewModel: VM
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ return inflater.inflate(getLayoutResId(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ initVM()
+ initView()
+ initData()
+ startObserve()
+ super.onViewCreated(view, savedInstanceState)
+ }
+
+ open fun startObserve() {}
+ abstract fun getLayoutResId(): Int
+
+ abstract fun initView()
+
+ abstract fun initData()
+
+ private fun initVM() {
+ providerVMClass()?.let {
+ mViewModel = ViewModelProviders.of(this).get(it)
+ lifecycle.addObserver(mViewModel)
+ }
+ }
+
+ open fun providerVMClass(): Class? = null
+
+ override fun onDestroy() {
+ lifecycle.removeObserver(mViewModel)
+ super.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/library/src/main/java/luyao/ktx/base/BaseViewModel.kt b/library/src/main/java/luyao/util/ktx/base/BaseViewModel.kt
similarity index 98%
rename from library/src/main/java/luyao/ktx/base/BaseViewModel.kt
rename to library/src/main/java/luyao/util/ktx/base/BaseViewModel.kt
index 1e0d3c3..908c959 100644
--- a/library/src/main/java/luyao/ktx/base/BaseViewModel.kt
+++ b/library/src/main/java/luyao/util/ktx/base/BaseViewModel.kt
@@ -1,4 +1,4 @@
-package luyao.ktx.base
+package luyao.util.ktx.base
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.MutableLiveData
diff --git a/library/src/main/java/luyao/util/ktx/ext/ToastExt.kt b/library/src/main/java/luyao/util/ktx/ext/ToastExt.kt
new file mode 100644
index 0000000..37d3562
--- /dev/null
+++ b/library/src/main/java/luyao/util/ktx/ext/ToastExt.kt
@@ -0,0 +1,48 @@
+package luyao.util.ktx.ext
+
+import android.content.Context
+import android.widget.Toast
+import androidx.annotation.StringRes
+
+/**
+ * Created by luyao
+ * on 2019/5/31 16:42
+ */
+
+
+fun Context.toast(content: String, duration: Int = Toast.LENGTH_SHORT) {
+ Toast.makeText(this.applicationContext, content, duration).apply {
+ show()
+ }
+}
+
+fun Context.toast(@StringRes id: Int, duration: Int = Toast.LENGTH_SHORT) {
+ toast(getString(id), duration)
+}
+
+fun Context.longToast(content: String) {
+ toast(content, Toast.LENGTH_LONG)
+}
+
+fun Context.longToast(@StringRes id: Int) {
+ toast(id, Toast.LENGTH_LONG)
+}
+
+fun Any.toast(context: Context, content: String, duration: Int = Toast.LENGTH_SHORT) {
+ context.toast(content, duration)
+}
+
+fun Any.toast(context: Context, @StringRes id: Int, duration: Int) {
+ context.toast(id, duration)
+}
+
+fun Any.longToast(context: Context, content: String) {
+ context.longToast(content)
+}
+
+fun Any.longToast(context: Context, @StringRes id: Int) {
+ context.longToast(id)
+}
+
+fun Context.getVersionName(): String = packageManager.getPackageInfo(packageName, 0).versionName
+