4
첫 번째 조각에서 조각을 실행하는 동안 나는이 오류를 받고 있어요

:NullPointerException이 : FragmentManager.beginTransaction()

@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(); 
     } 
    } 
: 여기

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

내가 오류를 받고 있어요 방법입니다

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(); 
      } 
     }   
    }  
} 
+0

는에서 getSupportFragmentManager() –

+0

@RajenRaiyarela을 시도합니다. 수업이 Fragment를 확장하기 때문일 수 있습니다. 활동을 확장하지 않습니다. – hyunikel

+0

전체 활동 코드를 게시 할 수 있습니다 –

답변

6

FragmentManager가 중첩 된 조각 사용 this.getChildFragmentManager()이 조각 클래스 다른 사용하는 경우이 코드 아래 를 사용하는 activity.So에 부착 될 때까지 null가됩니다 getActivity().getFragmentManager() 또는 getActivity().getSupportFragmentManager() . 나는 그것을 시도하지만, "방법에서 getSupportFragmentManager은() 유형의 조각에 대한 정의입니다"라고 :

+0

onClick 메서드는 중첩 된 정적 수신기 클래스에 있습니다. Fragment 클래스를 참조해야하는 이것을 사용할 수 없습니다. 어떻게 접근 할 수 있습니까? – hyunikel

+0

감사합니다 @Krish, 중첩 된 리스너 클래스에서 static이라는 단어를 제거하고 컨테이너 클래스에서 인스턴스 메소드를 가져 오는 것입니다. 그래서 내 지시가되었다 : FragmentManager fragmentManager = getRentFragment(). getActivity(). getFragmentManager(); – hyunikel

-2
 FragmentManager fragmentManager = 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(); 
+0

질문을 읽어보십시오. 답안의 두 번째 줄이 충돌합니다. – BlueLeaf