我已经编写了我的第一个 Kotlin 和 Android 应用程序,但我在这个应用程序上遇到了很多崩溃。
所有这些都与关键字相关lateinit。
我遇到如下崩溃:
Caused by e.y: lateinit property coordinator has not been initialized
和:
Fatal Exception: java.lang.RuntimeException
Unable to start activity ComponentInfo{app.myapp/mypackage.myapp.Controllers.MainActivity}: e.y: lateinit property coordinator has not been initialized
Caused by e.y
lateinit property coordinator has not been initialized
myapp.com.myapp.Controllers.Fragments.Parents.MyParentFragment.getCoordinator
Run Code Online (Sandbox Code Playgroud)
例如,最后一个跟踪与我在片段上设置的变量相关,如下所示:
fun newInstance(mainObject: MyObject, anotherObject: AnotherObject, coordinator: FragmentCoordinator): MyFragment {
val fragment = MyFragment()
fragment.mainObject = mainObject
fragment.anotherObject = ticket
fragment.coordinator = coordinator
return fragment
}
Run Code Online (Sandbox Code Playgroud)
片段侧面看起来像:
class MyFragment: MyParentFragment() {
companion object …Run Code Online (Sandbox Code Playgroud) 我有几个用ViewPager. 我在 MainActivity 的方法中addOnPageChangeListener添加了一个,它给出了所选片段的位置。ViewPageronCreate
尽管我通过声明 a 来防止片段自行销毁setOffscreenPageLimit,但我仍然没有弄清楚如何从 MainActivity 访问片段,因为简单地使用findViewById会返回空对象异常。
我想做的事:
我想访问片段的元素,例如布局和滚动视图,OnPageListener在ViewPager:
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int i) {
if(i == 0) {
// Do something with the first fragment.
} else if(i == 1) {
// Do something with the second fragment.
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用ViewPager:FragmentPagerAdapter
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public …Run Code Online (Sandbox Code Playgroud)