文章目录
Bundle putExtra + to Pair<>
arguments = bundleOf(
CONVERSATION_ID to conversationId,
ARGS_IS_GROUP to isGroup,
ARGS_IS_BOT to isBot
)
Observable绑定生命周期用法
protected val scopeProvider: AndroidLifecycleScopeProvider by lazy { AndroidLifecycleScopeProvider.from(this) }
Observable.just(userId).map {
userRepository.getUserById(userId)!!
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.autoDisposable(scopeProvider)
.subscribe({
})
/**
* Extension that proxies to [Observable.as] + [AutoDispose.autoDisposable]
*/
@CheckReturnValue
inline fun <T> Observable<T>.autoDisposable(
provider: LifecycleScopeProvider<*>): ObservableSubscribeProxy<T>
= this.`as`(AutoDispose.autoDisposable(provider))
Dagger2 初始化工具类
import android.app.Activity;
import android.app.Application;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
//注意包名
import dagger.android.AndroidInjection;
import dagger.android.support.AndroidSupportInjection;
import dagger.android.support.HasSupportFragmentInjector;
import one.mixin.android.MixinApplication;
public class AppInjector{
public static AppComponent inject(MixinApplication mixinApp){
//AppComponent 这些是在编译期生成的,如果没找到请编译或查找哪里配置错了
AppComponent component = DaggerAppComponent.builder().application(mixinApp).build();
component.inject(mixinApp);
return component;
}
public static AppComponent init(MixinApplication mixinApp) {
AppComponent component = inject(mixinApp);
mixinApp.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
handleActivity(activity);
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
});
return component;
}
private static void handleActivity(Activity activity) {
if (activity instanceof Injectable) {
AndroidInjection.inject(activity);
return;
}
if (activity instanceof HasSupportFragmentInjector) {
AndroidInjection.inject(activity);
}
if (activity instanceof FragmentActivity) {
((FragmentActivity) activity).getSupportFragmentManager()
.registerFragmentLifecycleCallbacks(
new FragmentManager.FragmentLifecycleCallbacks() {
@Override
public void onFragmentCreated(FragmentManager fm, Fragment f,
Bundle savedInstanceState) {
if (f instanceof Injectable) {
AndroidSupportInjection.inject(f);
}
}
}, true);
}
}
}
使用
lateinit var appComponent: AppComponent
uiThread {
appComponent = AppInjector.inject(this)
}
Rxjava2 订阅/取消
class ConcertActivity : AppCompatActivity() {
private val adapter: ConcertAdapter()
private lateinit var viewModel: ConcertViewModel
private val disposable = CompositeDisposable()
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val recyclerView = findViewById(R.id.concert_list)
viewModel = ViewModelProviders.of(this)
.get<ConcertViewModel>()
recyclerView.setAdapter(adapter)
}
override fun onStart() {
super.onStart()
disposable.add(viewModel.concertList
.subscribe(adapter::submitList)))
}
override fun onStop() {
super.onStop()
disposable.clear()
}
}
动态绑定LiveData
protected lateinit var dataObserver: Observer<C>
dataObserver = Observer { }
bindLiveData(walletViewModel.allSnapshots(initialLoadKey = initialLoadKey))
protected fun bindLiveData(liveData: LiveData<C>) {
currentLiveData?.removeObserver(dataObserver)
currentLiveData = liveData
currentLiveData?.observe(this, dataObserver)
}
lambda高阶函数:函数变参,可代替接口回调
参考资料:https://kotlinlang.org/docs/reference/lambdas.html
// keep a function reference for the retry event
//申明
private var retry: (() -> Any)? = null
fun loadAfter(params:Any, callback:Any){
//使用
retry = {
loadAfter(params, callback)
}
}
ViewModel基本写法
val factory=AboutViewModelFactory(AboutRepository.getInstance(AppDatabase.getInstance(requireActivity()).aboutDao()))
val aboutViewModel = ViewModelProviders.of(this, factory).get(AboutViewModel::class.java)
ViewModel高级写法
ViewModelProviders.of(this, object : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
val repoType = 1
val repo = ServiceLocator.instance(this@RedditActivity)
.getRepository(repoType)
@Suppress("UNCHECKED_CAST")
return SubRedditViewModel(repo) as T
}
})[SubRedditViewModel::class.java]
List用map转变类型
val items = data?.children?.map { it.data } ?: emptyList()
data class的Copy函数
data class User(
val name: String = "",
val age: Int = 18
)
val user = User().copy(name = "MaQi", age = 18)
@StringRes 注解
fun CoordinatorLayout.showLongSnackbar(@StringRes stringRes: Int) {
Snackbar.make(this, stringRes, Snackbar.LENGTH_LONG).show()
}