Java Android中存在空指针异常问题
这里是错误Java Android中存在空指针异常问题,java,android,kotlin,Java,Android,Kotlin,这里是错误 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 andro
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)
这是我认为有问题的代码
碎片翼翼
@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;
}
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()
}
}
分段自适应
@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;
}
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吗?非常感谢
位置
从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
}
位置
从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
}
我猜
位置
不是1,2或3我猜位置
不是1,2或3