java - Android中的空指针异常问题
问题描述
这是错误
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myapplication, PID: 24397
java.lang.NullPointerException
at com.example.myapplication.ui.main.SectionsPagerAdapter.getItem(SectionsPagerAdapter.kt:43)
at androidx.fragment.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:105)
at androidx.viewpager.widget.ViewPager.addNewItem(ViewPager.java:1010)
at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1158)
at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622)
at android.view.View.measure(View.java:24530)
这是我认为有问题的代码
FragmentPagerAdapter
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
final long itemId = getItemId(position);
// Do we already have this fragment?
String name = makeFragmentName(container.getId(), itemId);
Fragment fragment = mFragmentManager.findFragmentByTag(name);
if (fragment != null) {
if (DEBUG) Log.v(TAG, "Attaching item #" + itemId + ": f=" + fragment);
mCurTransaction.attach(fragment);
} else {
fragment = getItem(position);
if (DEBUG) Log.v(TAG, "Adding item #" + itemId + ": f=" + fragment);
mCurTransaction.add(container.getId(), fragment,
makeFragmentName(container.getId(), itemId));
}
if (fragment != mCurrentPrimaryItem) {
fragment.setMenuVisibility(false);
fragment.setUserVisibleHint(false);
}
return fragment;
}
SectionsPagerAdapter
override fun getItem(position: Int): Fragment {
// getItem is called to instantiate the fragment for the given page.
// Return a PlaceholderFragment (defined as a static inner class below).
return when(position){
1 -> input
2 -> history
3 -> chart
else -> throw NullPointerException()
}
}
我的片段可以返回一个空片段,所以我在 PagerAdapter 中创建了 NullPointerException。有人可以帮助我为什么我得到 NullPointerException 吗?非常感谢
解决方案
position
0
从而不是开始1
。试试下面:
override fun getItem(position: Int): Fragment {
return when(position){
0 -> input
1 -> history
2 -> chart
else -> throw NullPointerException()
}
}
你getCount
也应该回来3
override fun getCount(): Int {
return 3
}
推荐阅读
- wordpress - AWS WordPress ERR_TOO_MANY_REDIRECTS
- ios - 过渡动画在 SwiftUI 中不起作用
- c# - c# linq where on object lists 非常慢
- python - 我可以从量化的 Tensoflow 模型中获得什么结果?
- android - 使用 MockK 测试 LiveData 和协程
- php - 根据 wpcs 清理代码以进行 yoda 条件检查
- windows - 如何通过 Powershell 命令 Invoke-RESTMethod 从 CircleCI 下载工件
- amazon-web-services - AWS SES - 能够接收少量电子邮件但不是全部
- excel - 如何将工作表从一个工作簿复制到另一个工作簿
- typescript - 数组的类型定义