尝试从第一个片段启动片段时出现此错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.FragmentTransaction android.app.FragmentManager.beginTransaction()' on a null object reference

下面是我得到错误的方法:
    @Override
    public void onClick(View v) {
        Fragment fragment = new PropertyFragment();
        if (fragment != null) {
            FragmentManager fragmentManager = fragment.getFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

            // Replace whatever is in the fragment_container view with this fragment,
            // and add the transaction to the back stack so the user can navigate back
            fragmentTransaction.replace(R.id.rent_viewer, fragment);
            fragmentTransaction.addToBackStack(null);

            // Commit the transaction
            fragmentTransaction.commit();
        }
    }

准确地说,以下代码指令导致了错误:
fragmentManager.beginTransaction();

下面是类和嵌套类的外观:
public class RentFragment extends Fragment {

    ...

    @SuppressWarnings("unused")
    private OnRentFragmentInteractionListener mListener;

    public RentFragment() {
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnRentFragmentInteractionListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnRentFragmentInteractionListener");
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_rent, container, false);

        myOnClickListener = new RentOnClickListener(getActivity());

        return rootView;
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    public interface OnRentFragmentInteractionListener {
        public void onRentFragmentInteraction(Uri uri);
    }

    private static class RentOnClickListener implements View.OnClickListener {

        private final Context context;

        private RentOnClickListener(Context context) {
            this.context = context;
        }

        @Override
        public void onClick(View v) {
            Fragment fragment = new PropertyFragment();
            if (fragment != null) {
                FragmentManager fragmentManager =  fragment.getFragmentManager();
                FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

                // Replace whatever is in the fragment_container view with this fragment,
                // and add the transaction to the back stack so the user can navigate back
                fragmentTransaction.replace(R.id.rent_viewer, fragment);
                fragmentTransaction.addToBackStack(null);

                // Commit the transaction
                fragmentTransaction.commit();
            }
        }
    }
}

最佳答案

FragmentManager在附加到活动之前将为空。因此请使用下面的代码,
如果它是一个嵌套的片段,请为片段类使用this.getChildFragmentManager(),否则请使用getActivity().getFragmentManager()getActivity().getSupportFragmentManager()

08-18 14:37