Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 14 additions & 6 deletions KBase/src/main/java/com/summer/kbase/base/BaseActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@ import android.arch.lifecycle.ViewModelProviders
import android.databinding.DataBindingUtil
import android.databinding.ViewDataBinding
import android.os.Bundle
import android.os.Messenger
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentActivity
import com.summer.kbase.common.LoggerUtils
import com.trello.rxlifecycle2.components.support.RxAppCompatActivity
import dagger.android.DispatchingAndroidInjector
import dagger.android.support.HasSupportFragmentInjector
import java.lang.reflect.ParameterizedType
import javax.inject.Inject

Expand All @@ -19,11 +21,15 @@ import javax.inject.Inject
* Email:sunmeng995@gmail.com
* Description:
*/
abstract class BaseActivity<V : ViewDataBinding, VM : BaseViewModel> : RxAppCompatActivity(), IBaseActivity {
abstract class BaseActivity<V : ViewDataBinding, VM : BaseViewModel> : RxAppCompatActivity(), IBaseActivity
,HasSupportFragmentInjector{

// @Inject
@Inject
lateinit var viewModelFactory: ViewModelProvider.Factory

@Inject
lateinit var fragmentInjector: DispatchingAndroidInjector<Fragment>

var viewModel: VM? = null
lateinit var binding: V

Expand All @@ -32,7 +38,7 @@ abstract class BaseActivity<V : ViewDataBinding, VM : BaseViewModel> : RxAppComp
//页面接受的参数方法
initParam()
//私有的初始化Databinding和ViewModel方法
initViewDataBinding(savedInstanceState!!)
initViewDataBinding(savedInstanceState)
//私有的ViewModel与View的契约事件回调逻辑
registerUIChangeLiveDataCallBack()
//页面数据初始化方法
Expand All @@ -43,10 +49,12 @@ abstract class BaseActivity<V : ViewDataBinding, VM : BaseViewModel> : RxAppComp

}

override fun supportFragmentInjector() = fragmentInjector

/**
* 注入绑定
*/
private fun initViewDataBinding(savedInstanceState: Bundle) {
private fun initViewDataBinding(savedInstanceState: Bundle?) {
viewModel = initViewModel()
if (viewModel == null) {
val modelClass: Class<*>
Expand Down Expand Up @@ -96,7 +104,7 @@ abstract class BaseActivity<V : ViewDataBinding, VM : BaseViewModel> : RxAppComp
*
* @return 布局layout的id
*/
abstract fun initContentView(savedInstanceState: Bundle): Int
abstract fun initContentView(savedInstanceState: Bundle?): Int

/**
* 初始化ViewModel的id
Expand Down
3 changes: 1 addition & 2 deletions KBase/src/main/java/com/summer/kbase/base/BaseViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package com.summer.kbase.base

import android.app.Application
import android.arch.lifecycle.*
import android.content.Context
import com.trello.rxlifecycle2.LifecycleProvider
import org.greenrobot.eventbus.EventBus

Expand Down Expand Up @@ -106,7 +105,7 @@ open class BaseViewModel(application: Application) : AndroidViewModel(applicatio
*
* @return True if use
*/
protected fun useEventBus(): Boolean {
protected open fun useEventBus(): Boolean {
return true
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import com.summer.kbase.di.DaggerDelegate
import com.summer.kbase.di.module.DaggerModule
import com.summer.kbase.di.module.ViewModelFactoryModule
import dagger.Component
import dagger.android.AndroidInjectionModule
import dagger.android.support.AndroidSupportInjectionModule
import javax.inject.Singleton

/**
Expand All @@ -14,7 +14,7 @@ import javax.inject.Singleton
* Description:DaggerComponent 顶级注入器,作用域是 @Singleton
*/
@Singleton
@Component(modules = [(ViewModelFactoryModule::class), (AndroidInjectionModule::class), (DaggerModule::class)])
@Component(modules = [ViewModelFactoryModule::class, AndroidSupportInjectionModule::class, DaggerModule::class])
interface DaggerComponent {

/**
Expand Down
12 changes: 4 additions & 8 deletions app/src/main/java/com/summer/mvvmk/app/MainApplication.kt
Original file line number Diff line number Diff line change
@@ -1,29 +1,25 @@
package com.summer.mvvmk.app

import android.app.Activity
import android.app.Application
import android.support.v4.app.Fragment
import com.summer.kbase.app.BaseApplication
import com.summer.kbase.di.DaggerDelegate
import com.summer.mvvmk.di.component.AppComponent
import com.summer.mvvmk.di.component.DaggerAppComponent
import dagger.android.AndroidInjector
import dagger.android.DispatchingAndroidInjector
import dagger.android.HasActivityInjector
import dagger.android.support.HasSupportFragmentInjector
import javax.inject.Inject

/**
* Created by sunmeng on 2018/10/11.
* Email:sunmeng995@gmail.com
* Description:
*/
class MainApplication : BaseApplication(), HasActivityInjector, HasSupportFragmentInjector {
class MainApplication : BaseApplication(), HasActivityInjector {

@Inject
lateinit var mActivityInjector: DispatchingAndroidInjector<Activity>
@Inject
lateinit var mFragmentInjector: DispatchingAndroidInjector<Fragment>
// @Inject
// lateinit var mFragmentInjector: DispatchingAndroidInjector<Fragment>

private lateinit var mDaggerDelegate: DaggerDelegate

Expand All @@ -38,6 +34,6 @@ class MainApplication : BaseApplication(), HasActivityInjector, HasSupportFragme

override fun activityInjector(): AndroidInjector<Activity> = mActivityInjector

override fun supportFragmentInjector(): AndroidInjector<Fragment> = mFragmentInjector
// override fun supportFragmentInjector(): AndroidInjector<Fragment> = mFragmentInjector

}
Original file line number Diff line number Diff line change
@@ -1,16 +1,6 @@
package com.summer.mvvmk.di.builder

import android.arch.lifecycle.ViewModel
import android.arch.lifecycle.ViewModelProvider
import com.summer.kbase.di.scope.FragmentScope
import com.summer.kbase.di.vm.ViewModelFactory
import com.summer.kbase.di.vm.ViewModelKey
import com.summer.mvvmk.ui.fragment.MainFragment
import com.summer.mvvmk.ui.vm.MainViewModel
import dagger.Binds
import dagger.Module
import dagger.android.ContributesAndroidInjector
import dagger.multibindings.IntoMap

/**
* Created by sunmeng on 2018/10/11.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,17 @@ import com.summer.kbase.di.scope.AppScope
import com.summer.mvvmk.app.MainApplication
import com.summer.mvvmk.di.module.AppModule
import dagger.Component
import dagger.android.support.AndroidSupportInjectionModule

/**
* Created by sunmeng on 2018/10/11.
* Email:sunmeng995@gmail.com
* Description:
*
* 不明白为什么这个component需要加上AndroidSupportInjectionModule,明明父DaggerComponent里面关联了这个!!!
*/
@AppScope
@Component(dependencies = [DaggerComponent::class], modules = [(AppModule::class)])
@Component(dependencies = [DaggerComponent::class], modules = [(AppModule::class), AndroidSupportInjectionModule::class])
interface AppComponent {

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package com.summer.mvvmk.ui.activity

import android.arch.lifecycle.ViewModelProvider
import android.os.Bundle
import com.summer.kbase.base.BaseActivity
import com.summer.mvvmk.BR
import com.summer.mvvmk.R
import com.summer.mvvmk.databinding.ActivityLoginBinding
import com.summer.mvvmk.ui.vm.LoginViewModel
import javax.inject.Inject

/**
* Created by sunmeng on 2018/10/19.
Expand All @@ -16,10 +14,10 @@ import javax.inject.Inject
*/
class LoginActivity : BaseActivity<ActivityLoginBinding, LoginViewModel>() {

@Inject
lateinit var factory: ViewModelProvider.Factory
// @Inject
// lateinit var factory: ViewModelProvider.Factory

override fun initContentView(savedInstanceState: Bundle) = R.layout.activity_login
override fun initContentView(savedInstanceState: Bundle?) = R.layout.activity_login

override fun initVariableId() = BR.viewModel

Expand Down
98 changes: 49 additions & 49 deletions app/src/main/java/com/summer/mvvmk/ui/fragment/MainFragment.kt
Original file line number Diff line number Diff line change
@@ -1,49 +1,49 @@
package com.summer.mvvmk.ui.fragment

import android.annotation.SuppressLint
import android.arch.lifecycle.ViewModelProvider
import android.arch.lifecycle.ViewModelProviders
import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.summer.kbase.common.LoggerUtils
import com.summer.kbase.ext.observe
import com.summer.mvvmk.R
import com.summer.mvvmk.entity.Person
import com.summer.mvvmk.ui.vm.MainViewModel
import kotlinx.android.synthetic.main.fragment_main.*
import javax.inject.Inject


/**
* Created by sunmeng on 2018/10/11.
* Email:sunmeng995@gmail.com
* Description:
*/
class MainFragment : Fragment() {

@Inject
lateinit var viewModelFactory: ViewModelProvider.Factory

private lateinit var viewModel: MainViewModel

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_main, container)
}

@SuppressLint("SetTextI18n")
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel = ViewModelProviders.of(activity!!, viewModelFactory).get(MainViewModel::class.java)
viewModel.userId.observe(this) {
// text.text = "${jordon.name} -- ${jordon.age} -- $it"
text.text = "-- $it"
}
text.setOnClickListener {
viewModel.changeID("xxx")
}
}

}
//package com.summer.mvvmk.ui.fragment
//
//import android.annotation.SuppressLint
//import android.arch.lifecycle.ViewModelProvider
//import android.arch.lifecycle.ViewModelProviders
//import android.os.Bundle
//import android.support.v4.app.Fragment
//import android.view.LayoutInflater
//import android.view.View
//import android.view.ViewGroup
//import com.summer.kbase.common.LoggerUtils
//import com.summer.kbase.ext.observe
//import com.summer.mvvmk.R
//import com.summer.mvvmk.entity.Person
//import com.summer.mvvmk.ui.vm.MainViewModel
//import kotlinx.android.synthetic.main.fragment_main.*
//import javax.inject.Inject
//
//
///**
// * Created by sunmeng on 2018/10/11.
// * Email:sunmeng995@gmail.com
// * Description:
// */
//class MainFragment : Fragment() {
//
// @Inject
// lateinit var viewModelFactory: ViewModelProvider.Factory
//
// private lateinit var viewModel: MainViewModel
//
// override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// return inflater.inflate(R.layout.fragment_main, container)
// }
//
// @SuppressLint("SetTextI18n")
// override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
// super.onViewCreated(view, savedInstanceState)
// viewModel = ViewModelProviders.of(activity!!, viewModelFactory).get(MainViewModel::class.java)
// viewModel.userId.observe(this) {
//// text.text = "${jordon.name} -- ${jordon.age} -- $it"
// text.text = "-- $it"
// }
// text.setOnClickListener {
// viewModel.changeID("xxx")
// }
// }
//
//}
9 changes: 9 additions & 0 deletions app/src/main/java/com/summer/mvvmk/ui/vm/LoginViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,13 @@ import javax.inject.Inject
*/
class LoginViewModel @Inject constructor(application: Application) : BaseViewModel(application) {

/**
* 是否使用 EventBus
*
* @return True if use
*/
override fun useEventBus(): Boolean {
return false
}

}