- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的 getFragmentManager 函数 setUpMapIfNeeded() 返回空指针异常
。我将 fragment 与 activity_main.xml 分开放置,这里是我的代码:
activity_main.xml :
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.yai.testmap.MainActivity"
tools:ignore="MergeRootFrame" />
fragment _main.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">
<!-- MapView-->
<com.google.android.gms.maps.MapView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/map"
/>
这是我的 *.java 文件:
package com.yai.testmap;import android.support.v7.app.ActionBarActivity;import android.support.v4.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;/* FOR ERROR REPPORT */import android.util.Log;/* IMPORT FOR DROPDOWNLIST USED THIS PROJECT */import android.widget.CheckBox;import android.widget.Spinner;import android.widget.Toast;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.AdapterView.OnItemSelectedListener;import com.google.android.gms.common.ConnectionResult;import com.google.android.gms.common.GooglePlayServicesNotAvailableException;import com.google.android.gms.common.GooglePlayServicesUtil;/* IMPORT FOR GOOGLE MAP */import com.google.android.gms.maps.GoogleMap;import com.google.android.gms.maps.MapFragment;import com.google.android.gms.maps.MapsInitializer;import com.google.android.gms.maps.SupportMapFragment;import com.google.android.gms.maps.MapView;/* FOR GOOGLE MAP TYPE */import static com.google.android.gms.maps.GoogleMap.MAP_TYPE_HYBRID;import static com.google.android.gms.maps.GoogleMap.MAP_TYPE_NONE;import static com.google.android.gms.maps.GoogleMap.MAP_TYPE_NORMAL;import static com.google.android.gms.maps.GoogleMap.MAP_TYPE_SATELLITE;import static com.google.android.gms.maps.GoogleMap.MAP_TYPE_TERRAIN;public class MainActivity extends ActionBarActivity implements OnItemSelectedListener { private static MapView mMapView; private static MapFragment mMapFragment; private static GoogleMap mGoogleMap; private static CheckBox mTrafficCheckbox, mLocationCheckbox, mBuildingCheckbox, mIndoorCheckbox; public static class PlaceholderFragment extends Fragment { public PlaceholderFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); Spinner spinner = (Spinner) rootView.findViewById(R.id.spinnerOption); ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.spinner_option_string, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); spinner.setOnItemSelectedListener((OnItemSelectedListener) getActivity()); mTrafficCheckbox = (CheckBox) rootView.findViewById(R.id.checkbox_traffic); mLocationCheckbox = (CheckBox) rootView.findViewById(R.id.checkbox_location); mBuildingCheckbox = (CheckBox) rootView.findViewById(R.id.checkbox_building); mIndoorCheckbox = (CheckBox) rootView.findViewById(R.id.checkbox_indoor); MapsInitializer.initialize(getActivity()); switch (GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity()) ) { case ConnectionResult.SUCCESS : mMapView = (MapView) rootView.findViewById(R.id.map); mMapView.onCreate(savedInstanceState); if(mMapView != null){ mGoogleMap = mMapView.getMap(); mGoogleMap.getUiSettings().setMyLocationButtonEnabled(false); mGoogleMap.setMyLocationEnabled(true); } } return rootView; } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new PlaceholderFragment()).commit(); } setUpMapIfNeeded(); } private void setUpMapIfNeeded(){ if(mGoogleMap == null){ //mMapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map); mGoogleMap = mMapView.getMap(); } } private boolean checkReady(){ if(mGoogleMap == null){ Toast.makeText(this, R.string.map_not_ready, Toast.LENGTH_SHORT).show(); return false; } return true; } private void updateTraffic(){ if(!checkReady()){ return; } mGoogleMap.setTrafficEnabled(mTrafficCheckbox.isChecked()); } public void onTrafficToggled(View view){ updateTraffic(); } private void updateLocation(){ if(!checkReady()){ return; } mGoogleMap.setMyLocationEnabled(mLocationCheckbox.isChecked()); } public void onLocationToggled(View view){ updateLocation(); } private void updateBuilding(){ if(!checkReady()){ return; } mGoogleMap.setBuildingsEnabled(mBuildingCheckbox.isChecked()); } public void onBuildingToggled(View view){ updateBuilding(); } private void updateIndoor(){ if(!checkReady()){ return; } mGoogleMap.setIndoorEnabled(mIndoorCheckbox.isChecked()); } public void onIndoorToggled(View view){ updateIndoor(); } @Override public void onItemSelected(AdapterView parent, View view, int position, long id){ setLayer((String) parent.getItemAtPosition(position)); } private void setLayer(String layerName){ if(!checkReady()){ return; } if(layerName.equals(getString(R.string.normal))){ mGoogleMap.setMapType(MAP_TYPE_NORMAL); } else if(layerName.equals(getString(R.string.hybrid))){ mGoogleMap.setMapType(MAP_TYPE_HYBRID); } else if(layerName.equals(getString(R.string.satellite))){ mGoogleMap.setMapType(MAP_TYPE_SATELLITE); } else if(layerName.equals(getString(R.string.terrain))){ mGoogleMap.setMapType(MAP_TYPE_TERRAIN); } else if(layerName.equals(getString(R.string.none_map))){ mGoogleMap.setMapType(MAP_TYPE_NONE); } else{ Log.i("LDA", "Error setting layer with name " + layerName); } } @Override public void onNothingSelected(AdapterView parent){ } @Override protected void onResume() { super.onResume(); setUpMapIfNeeded(); if (mGoogleMap != null) { updateTraffic(); updateLocation(); updateBuilding(); updateIndoor(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }}
I've tried to use getSupportFramentManager with android.support.v4.app.DialogFragment support library :
mGoogleMap = ((MapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
但还是不行。我从 eclipse Cannot cast from Fragment to MapFragment
得到了这个错误。我试图扩展到 FragmentActivity 并仍然返回空指针。但是当我尝试在函数 setUpMapIfNeeded() 中注释 getSupportFragmentManager 时,错误消失了。
这是我的 LogCat:
03-24 20:43:36.124: E/AndroidRuntime(27152): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.yai.testmap/com.yai.testmap.MainActivity}: java.lang.NullPointerException03-24 20:43:36.124: E/AndroidRuntime(27152): at com.yai.testmap.MainActivity.setUpMapIfNeeded(MainActivity.java:104)03-24 20:43:36.124: E/AndroidRuntime(27152): at com.yai.testmap.MainActivity.onCreate(MainActivity.java:98)
有什么想法吗?
最佳答案
转换问题可以通过以下方式解决
mGoogleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
如果你想在 fragment 中使用 map ,你需要使用 MapView
或者你需要扩展 SupportMapFragment
。
你可以引用下面的内容
Android - android.view.InflateException: Binary XML file line #8: Error inflating class fragment
关于android - getFragmentManager 返回空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22609829/
我真的把这两种组合搞混了 getActivity().getFragmentManager() 和 fragment.getFragmentManager() 好像我们看到了 Activity.jav
收到 androidx.fragment.app.Fragment 的弃用警告: warning: [deprecation] getFragmentManager() in Fragment has
我正在使用 this tutorial为应用程序创建滑动菜单,但在以下几行中出现错误,我无法解决: getFragmentManager(); getActionBar(); 将AppCompat添加
我有一个自定义对话框, public class DialogBoxLogInPop extends DialogBox implements View.OnClickListener { //...
我的 getFragmentManager 函数 setUpMapIfNeeded() 返回空指针异常。我将 fragment 与 activity_main.xml 分开放置,这里是我的代码: ac
如何在静态内部类中获取 getFragmentManager() 方法? 为什么?我正在尝试解决我的应用程序的旋转问题,到目前为止,似乎内部类必须是静态的才能使问题消失,但是当内部类是静态的时,我无法
我的应用以 API 8 及更高版本为目标并使用 ActionbarSherlock。 Activity 扩展了 SherlockFragmentActivity。我的 viewpager fragme
我有一个服务,用于将 View 添加到WindowManager。这个想法是拥有类似 Facebook 聊天头的东西。因此,即使我的应用程序不在前台运行, View 也将始终存在。 我需要添加到 Wi
我有两个 fragment 并将它们设置如下 fram1 = new FragMent1(); fragMentTra.addToBackStack(null); fragMentTra = getF
我正在开发一个包含很多 fragment 的 Android 应用程序。但是我在它们之间切换时遇到了问题。 假设我有一个 fragment A,现在我想转到 fragment B,为此我这样做 --
我正在尝试使用 Google API 在 android 中实现 Google Map,但出现错误 The method getFragmentManager() is undefined for t
因为我一直在使用我的代码,所以我使用了 fragment 。 为此,我有一个 Activity 通过标签使用 fragment 调用 fragment : FluxListFragment FLF =
编辑:问题是 fragment 正从 Activity 中分离出来。但是,我不知道如何防止这种情况。 我有一个使用标签栏的应用程序。单击其中一个选项卡时,它会在选项卡栏下方的空间中加载一个主题列表。其
我开始尝试使用 3 月 3 日刚刚发布的 Android 兼容性包向我的基于 2.1 的 Android 应用添加 fragment 。我将该库包含到我的项目中,并开始将代码从基于 Activity
测试 android.preference.PreferenceActivity 时,我收到以下警告: warning: [deprecation] getFragmentManager() in A
我有一个类在我的 Android 应用程序中处理数据库。当数据库更改时,我想更新显示 fragment 信息的 fragment 。我的方法是给 fragment 一个标签,然后使用以下代码找到 fr
我刚刚将一个 Android 项目迁移到 gradle。迁移前一切正常。我有相同的布局文件。我的仓库在这里: https://github.com/jackygrahamez/MayDay/tree/
我有一个导航 fragment 和一个内容 fragment 。我希望能够传递一个包,并根据 fragment 交互重新加载 fragment 。我见过有人说使用 .setArguments(),但它
我正在尝试启动包含在我项目本地库模块中的 DialogFragment。我调用它的类正在使用 Kotlin 并且我在函数 getFragmentManager() 上收到以下错误:以下函数都不能使用提
我正在开发一个 android 应用程序,每个选项卡中都有 TabHost 和 FragmentActivity。 在我的第一个选项卡中,我使用 ViewPager 指示器和按钮初始化 fragmen
我是一名优秀的程序员,十分优秀!