There is a parent activity that includes a ViewPager and a button. I want to call a method from the child Fragment of the ViewPager when I click on the button in parent activity, but it gives an error.
The activity code
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();
}
});
}
}
Th Fragmet code
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();
}
}
The error message
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.newApp.Fragments.AdminAddNewPhotoFragment.goToNextStep()' on a null object reference
You are getting your fragment from viewPager in a wrong way, this is how you shoud do it:
int index = mViewPager.getCurrentItem();
MyAdapter adapter = ((MyAdapter)viewPager.getAdapter());
AdminAddNewPhotoFragment adminAddNewPhotoFragment = (AdminAddNewPhotoFragment)adminAddNewStepViewPagerAdapter .getFragment(index);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.