2017-07-04 27 views
0

我想添加一個動態的谷歌地圖到一個片段,這個片段包含一個簡單的表單,它工作正常,當我添加谷歌地圖部分時出現錯誤。動態谷歌地圖觸發空對象引用錯誤

無法啓動活動ComponentInfo {com.jdplee.proyecto/com.jdplee.proyecto.ClientDetailActivity}:顯示java.lang.NullPointerException:嘗試調用虛擬方法「com.jdplee.proyecto.ClientDetailFragment com.jdplee。 proyecto.ClientDetailFragment.newInstance()」上的空對象引用

我有的是一mainActivity與打開的詳細視圖的按鈕,這是使用一個第二活動完成:

public class ClientDetailActivity extends AppCompatActivity { 

    public static final int REQUEST_ADD_TASK = 1; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.client_detail); 


     ClientDetailFragment mClientDetailFragment = (ClientDetailFragment) 
       getSupportFragmentManager().findFragmentById(R.id.cd_fragment_container); 

     if (mClientDetailFragment == null) { 

      mClientDetailFragment = ClientDetailFragment.newInstance(); 


      utilities.addFragmentToActivity(getSupportFragmentManager(), mClientDetailFragment, R.id.cd_fragment_container); 
     } 
    } 
} 

的client_la YOUT只有一個的FrameLayout其中片段將被放,片段類是:

public class ClientDetailFragment extends Fragment { 

    private static final int PERMISSION_REQUEST_CODE = 1; 
    private FusedLocationProviderClient mFusedLocationProviderClient; 

    public static ClientDetailFragment newInstance() { 
     return new ClientDetailFragment(); 
    } 

    public ClientDetailFragment(){ 
     //required empty constructor 
    } 

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

     if (getChildFragmentManager().findFragmentById(R.id.cd_maplocation) == null) { 
      SupportMapFragment mapFragment = new SupportMapFragment(); 

      getChildFragmentManager() 
        .beginTransaction() 
        .replace(R.id.cd_maplocation, mapFragment) 
        .commit(); 
} 

     return root; 
    } 

這個片段有自己的佈局,內部有對谷歌地圖的FrameLayout:

<FrameLayout 
     android:id="@+id/cd_maplocation" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1"/> 

那就是爲什麼我使用getChildFragment(),對我來說這一切都有道理,我不明白爲什麼錯誤,我錯過了什麼?

+0

這件事情,請提供logcat的。 –

+0

我做了,錯誤報價從logcat –

回答

0

穿上onActivityCreated()

if (getChildFragmentManager().findFragmentById(R.id.cd_maplocation) == null) { 
      SupportMapFragment mapFragment = new SupportMapFragment(); 

      getChildFragmentManager() 
        .beginTransaction() 
        .replace(R.id.cd_maplocation, mapFragment) 
        .commit(); 
    } 
+0

是的工作,你能解釋一下嗎?當創建並將片段放入framelayout的活動被創建時,該方法也會被調用? –

+0

如果工作,請接受答案。在父片段初始化之前,您正在將片段(子)放在另一個片段(父)和您的添加/替換子中,這是問題所在。 –

+0

如果你編輯你的答案並補充它,這將是非常有益的,我瞭解另一個片段內的片段,這就是爲什麼我使用'getChildFragment' –