我有一個活動,顯示使用多個片段的內容。其中一個片段需要在其中顯示Google地圖片段。我有地圖片段正確顯示下面的代碼和應用程序工作正常過渡不同的片段之間,但是,每次我退出應用程序通過按地圖片段後退按鈕,我得到一個android錯誤警報消息和logcat中出現以下nullpointerexception錯誤。日誌響應不會指向我的代碼中可以處理異常的任何地方。我認爲問題在於ondestroyView()方法,但目前我還不知道有關碎片的問題以解決問題。有任何想法嗎?NullPointerException在背部按下片段與嵌套谷歌地圖片段
logcat的錯誤:
01-10 14:15:42.888: E/AndroidRuntime(15039): FATAL EXCEPTION: main
01-10 14:15:42.888: E/AndroidRuntime(15039): java.lang.NullPointerException
01-10 14:15:42.888: E/AndroidRuntime(15039): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1410)
01-10 14:15:42.888: E/AndroidRuntime(15039): at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)
01-10 14:15:42.888: E/AndroidRuntime(15039): at android.os.Handler.handleCallback(Handler.java:725)
01-10 14:15:42.888: E/AndroidRuntime(15039): at android.os.Handler.dispatchMessage(Handler.java:92)
01-10 14:15:42.888: E/AndroidRuntime(15039): at android.os.Looper.loop(Looper.java:137)
01-10 14:15:42.888: E/AndroidRuntime(15039): at android.app.ActivityThread.main(ActivityThread.java:5041)
01-10 14:15:42.888: E/AndroidRuntime(15039): at java.lang.reflect.Method.invokeNative(Native Method)
01-10 14:15:42.888: E/AndroidRuntime(15039): at java.lang.reflect.Method.invoke(Method.java:511)
01-10 14:15:42.888: E/AndroidRuntime(15039): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-10 14:15:42.888: E/AndroidRuntime(15039): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-10 14:15:42.888: E/AndroidRuntime(15039): at dalvik.system.NativeStart.main(Native Method)
這裏是發生錯誤的片段:
public class HomeFragment extends Fragment {
public HomeFragment(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
return rootView;
}
public void onDestroyView() {
Fragment fragment = (getFragmentManager().findFragmentById(R.id.mainmap));
FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction();
ft.remove(fragment);
ft.commit();
super.onDestroyView();
}
爲片段的XML。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bg">
<fragment
android:id="@+id/mainmap"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment"/>
</RelativeLayout>
控制片段的MainActivity類的部分。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
}
// Display fragment view
private void displayView(int position) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = new HomeFragment();
break;
case 1:
fragment = new PromotionsFragment();
break;
case 2:
fragment = new ProfileFragment();
break;
case 3:
fragment = new SettingsFragment();
break;
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment).commit();
} else {
// error in creating fragment
Log.e("MainActivity", "Fragment creation error");
}
}
接下來的問題是,如果你想退出應用程序,你爲什麼刪除片段,如果活動將被銷燬反正 –
片段之間的轉換我得到了一個InflateException如果我沒有刪除次,當我發現e地圖碎片上的摧毀。 – user1996723
我也有同樣的問題,你有沒有得到任何解決方案? –