Kotlin骚气写法 一

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()
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值