Dagger 刀柄在数据绑定之前注入

时间:2021-04-05 07:14:30

标签: android data-binding android-databinding dagger dagger-hilt

我正在尝试在我的项目中使用 Dagger 刀柄。我有一个使用数据绑定的活动:

@AndroidEntryPoint
class MainActivity : AppCompatActivity(), SetGreeting {


    private lateinit var binding: ActivityMainBinding

    @Inject
    lateinit var fragmentFactory: FragmentsFactory

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        supportFragmentManager.fragmentFactory = fragmentFactory
        ...

    }

    override fun greeting(msg: String) {
       binding.greeting.text = msg
    }

}

这是我使用问候界面的方式:

interface SetGreeting {
    fun greeting(msg: String)
}


@Module
@InstallIn(ActivityComponent::class)
object SetGreetingModule {
    @Provides
    fun provideGreeting(): SetGreeting {
        return MainActivity()
    }
}

将在片段内部使用,就像这样:


@AndroidEntryPoint
class MainFragment : Fragment() {


    private val viewModel: MainViewModel by viewModels()
    private lateinit var binding: FragmentMainBinding

    @Inject
    lateinit var greetings: SetGreeting

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

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        viewModel.greeting.observe(viewLifecycleOwner, {
            it?.let { msg ->
                greetings.greeting(msg)
            }
        })

    }
}

问题是当我在项目中添加Dagger时,数据绑定不起作用,返回null。所以当覆盖函数 greeting 被调用时,我得到一个空指针异常。

1 个答案:

答案 0 :(得分:0)

我认为 dagger 不会调用 onCreate 所以 binding = DataBindingUtil.setContentView(this, R.layout.activity_main) 未被调用,则绑定将为空。 尝试在 init 块中初始化绑定对象 init{binding = DataBindingUtil.setContentView(this, R.layout.activity_main) }