简体   繁体   中英

Attempt to invoke virtual method on a null object reference while clicking on Parent Activity button to call a method from child Fragment

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM