我正在尝试在我的项目中使用 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
被调用时,我得到一个空指针异常。
答案 0 :(得分:0)
我认为 dagger 不会调用 onCreate
所以
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
未被调用,则绑定将为空。
尝试在 init 块中初始化绑定对象
init{binding = DataBindingUtil.setContentView(this, R.layout.activity_main) }