android - 在单击父活动按钮以从子片段调用方法时尝试在空对象引用上调用虚拟方法
问题描述
有一个父活动,其中包括一个 ViewPager 和一个按钮。当我单击父活动中的按钮时,我想从 ViewPager 的子片段调用一个方法,但它给出了错误。
活动代码
public class AdminAddNewProductsActivity extends AppCompatActivity {
public NonSwipeableViewPager viewPager;
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_admin_add_new_products);
viewPager = findViewById(R.id.viewPager);
admin_add_new_next_button = findViewById(R.id.admin_add_new_next_button);
AdminAddNewStepViewPagerAdapter adminAddNewStepViewPagerAdapter = new AdminAddNewStepViewPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(adminAddNewStepViewPagerAdapter);
AdminAddNewPhotoFragment adminAddNewPhotoFragment = (AdminAddNewPhotoFragment) getSupportFragmentManager().findFragmentById(R.id.photo_fragment_container);
admin_add_new_next_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adminAddNewPhotoFragment.goToNextStep();
}
});
}
}
片段代码
public class AdminAddNewPhotoFragment extends Fragment {
public AdminAddNewPhotoFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_admin_add_new_details_form, container, false);
}
@Override
public void onViewCreated(@NonNull @NotNull View view, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
public void showToast() {
Toast.makeText(getActivity().getApplicationContext(), "clicked", Toast.LENGTH_SHORT).show();
}
}
错误信息
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.newApp.Fragments.AdminAddNewPhotoFragment.goToNextStep()' on a null object reference
解决方案
您以错误的方式从 viewPager 获取片段,这就是您应该这样做的方式:
int index = mViewPager.getCurrentItem();
MyAdapter adapter = ((MyAdapter)viewPager.getAdapter());
AdminAddNewPhotoFragment adminAddNewPhotoFragment = (AdminAddNewPhotoFragment)adminAddNewStepViewPagerAdapter .getFragment(index);
推荐阅读
- python - 使用参差不齐的张量进行广播
- java - How to mock a service when validate request body and jump into class have @ControllerAdvice
- python - re.findall playing favorites in pipes when surrounded by greedy wildcards
- python - Django: For each loop with counter that loads queryset in small sets
- c# - 与 Salesforce 相比,C# 的 HMAC SHA512 值太短?
- python - 如何使用多个东西来检查 else 语句?
- sed - 使用 sed 混合大小写标签
- scala - 正常分布的 Spark 函数 (norm.dist)
- azure-devops - 是否可以基于变量创建额外的管道步骤?
- go - Go GORM Preload & Select only items 匹配预加载表条件