Koltin24.Takeout使用dagger2解耦(10)

使用方法:

build.gradle(project)下定义版本号

buildscript {
    ext.kotlin_version = '1.4.10'
    ext.dagger_version = "2.28.3"//dragger2 版本号
    repositories {
        google()
        jcenter()
        
    }

接下来在build.gradle(app)下添加

apply plugin: 'kotlin-kapt'

添加依赖:

    //dagger框架
    //dagger2 support begin
    implementation "com.google.dagger:dagger-android:$dagger_version"
    implementation "com.google.dagger:dagger-android-support:$dagger_version" // if you use the support libraries
    //annotationProcessor "com.google.dagger:dagger-android-processor:$dagger_version"//java use
    //annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"//java use
    kapt "com.google.dagger:dagger-android-processor:$dagger_version"//kotlin use
    kapt "com.google.dagger:dagger-compiler:$dagger_version"//kotlin use
    //dagger2 support end

HomeFragmentComponent.kt

package com.example.takeout.dagger2.component

import com.example.takeout.ui.fragment.HomeFragment
import com.example.takeout.dagger2.module.HomeFragmentModule
import dagger.Component

@Component(modules = arrayOf(HomeFragmentModule::class)) interface HomeFragmentComponent {

    fun inject(homeFragment: HomeFragment)
}

HomeFragmentModule.kt

package com.example.takeout.dagger2.module

import com.example.takeout.presenter.HomeFragmentPresenter
import com.example.takeout.ui.fragment.HomeFragment
import dagger.Module
import dagger.Provides

@Module class HomeFragmentModule(val homeFragment: HomeFragment){

    @Provides fun provideHomeFragmentPresenter(): HomeFragmentPresenter {
        return HomeFragmentPresenter(homeFragment)
    }
}

HomeFragment.kt中使用注解,不再使用homeFragmentPresenster = HomeFragmentPresenster(this)这种耦合的形式

package com.example.takeout.ui.fragment

import android.app.Fragment
import android.graphics.Color
import android.os.Bundle
import android.util.Log
import android.util.TypedValue
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.takeout.R
import com.example.takeout.dagger2.component.DaggerHomeFragmentComponent
import com.example.takeout.dagger2.module.HomeFragmentModule
import com.example.takeout.presenter.HomeFragmentPresenter
import com.example.takeout.ui.adapter.HomeRvAdapter
import com.heima.takeout.model.beans.Seller
import kotlinx.android.synthetic.main.fragment_home.*
import org.jetbrains.anko.find
import org.jetbrains.anko.toast
import javax.inject.Inject

class HomeFragment : Fragment() {
    lateinit var homeRvAdapter: HomeRvAdapter//延迟初始化
    lateinit var rvHome: RecyclerView
    //dragger2注解使用prenster
    @Inject
    lateinit var homeFragmentPresenter:HomeFragmentPresenter

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view = View.inflate(activity, R.layout.fragment_home, null)
        rvHome = view.find<RecyclerView>(R.id.rv_home)
        //上下布局
        rvHome.layoutManager = LinearLayoutManager(activity)
        homeRvAdapter = HomeRvAdapter(activity)
        rvHome.adapter = homeRvAdapter
//        homeFragmentPresenster = HomeFragmentPresenster(this)
        //TODO:解耦View层和P层,通过dagger2(基于注解的依赖注入)生成HomeFragmentPresenter
        DaggerHomeFragmentComponent.builder().homeFragmentModule(HomeFragmentModule(this)).build().inject(this)

        distance = 120.dp2px()
        return view
    }

    fun Int.dp2px(): Int {
        return TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP,
            toFloat(), resources.displayMetrics
        ).toInt()

    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        initData()
    }

    val datas: ArrayList<Seller> = ArrayList<Seller>()
    var sum: Int = 0
    var distance: Int = 0
    var alpha = 55
    private fun initData() {
//        for (i in 0 until 100) {
//            datas.add("我是商家:" + i)
//        }
        homeFragmentPresenter.getHomeInfo()
//        homeRvAdapter.setData(datas)
    }

    //    所有的数据
    val allList: ArrayList<Seller> = ArrayList()
    fun onHomeSuccess(nearbySellers: List<Seller>, otherSellers: List<Seller>) {
        allList.clear()
        allList.addAll(nearbySellers)
        allList.addAll(otherSellers)
        homeRvAdapter.setData(allList)

        //有数据可以滚动才可以监听滚动事件,设置标题的透明效果
        rvHome.setOnScrollListener(object : RecyclerView.OnScrollListener() {

            override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
                if (recyclerView != null) {
                    super.onScrollStateChanged(recyclerView, newState)
                }
            }

            override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
                if (recyclerView != null) {
                    super.onScrolled(recyclerView, dx, dy)
                }
                sum += dy
                if (sum > distance) {
                    alpha = 255
                } else {
                    alpha = sum * 200 / distance
                    alpha += 55
                }
                Log.e("home", "alpha:$alpha")
                ll_title_container.setBackgroundColor(Color.argb(alpha, 0x31, 0x90, 0xe8))
            }
        })
    }

    fun onHomeFailed() {
        toast("onHomeFailed")
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值