【发布时间】:2016-12-26 06:17:39
【问题描述】:
BaseFragment 类
open class BaseFragment : Fragment() {
@Inject lateinit var apiManager: ApiManager
@Inject lateinit var eventBus: EventBus
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
App.getInstance().component.inject(this)
}
override fun onStop() {
eventBus.unreg(this)
super.onStop()
}
override fun onStart() {
super.onStart()
eventBus.reg(this)
}
}
RoomsFragment 类
class RoomsFragment : BaseFragment() {
@Inject lateinit var roomAdapter: RoomsAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
App.getInstance().component.inject(this)
}
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater?.inflate(R.layout.fragment_rooms_fragment_new, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
recyclerView.adapter = roomAdapter //This line throws null or lateinit property roomAdapter has not been initialized
}
}
AdapterModule 类
@Module(includes = AppModule.class)
public class AdapterModule {
@Provides //App module has EventBus so i included it in Module
RoomsAdapter provideRoomsAdapter(EventBus eventBus) {
return new RoomsAdapter(eventBus);
}
}
AppComonent 类
@Singleton
@Component(modules = {AppModule.class, AdapterModule.class})
public interface ApplicationComponent {
void inject(ApiManager apiManager);
void inject(BaseFragment baseFragment);
}
如您所见,我正在尝试在超类和子类中注入对象,但它没有按预期工作。 BaseFragment 注入的对象可以找到,但 RoomsFragment 注入失败。有什么解决办法吗?
修复:
我忘记在 ApplicationComponent 中添加子类RoomsFragment 的接口。由于它的超类BaseFragment 接口存在,它在编译时没有抛出任何错误。
@Singleton
@Component(modules = {AppModule.class, AdapterModule.class})
public interface ApplicationComponent {
void inject(RoomsFragment roomsFragment);
void inject(ApiManager apiManager);
void inject(BaseFragment baseFragment);
}
【问题讨论】:
-
您在组件中定义了 RoomsFragment?
-
是的,我做到了.....
-
希望你在RoomsFragment的真实代码App.getInstance().component.inject(this)中没有注释这个。?
-
我尝试了两种方式。但没有运气。
-
拆分组件试试。