【问题标题】:How to use getchildfragmentmanager without extending fragment class?如何在不扩展片段类的情况下使用 getchildfragmentmanager?
【发布时间】:2015-07-02 13:29:37
【问题描述】:

我正在使用

class baseactivity extends Activity
{
    //some stuffs is here, so i cannot Extend Fragment  
}
class activity extends baseactivity
{
    GoogleMap map=((MapFragment) getFragmanentManager().findFragmentById(R.id.map)).getMap();

    if(map!=null)
        Log.e("map is not null","map was unable to initialize");//printing till kitkat version
    else
        Log.e("map is initialize","successfully initialize");//printing in lollipop
}

在 kitkat 之前它工作正常,但它在棒棒糖版本中是 null 我知道我可以使用 getchildfragmentmanager 但我无法扩展片段类,因为我的项目几乎完成了,所以我无法做出大的改变。 在不扩展片段类的情况下帮助我。

更新的代码对我也不起作用

class Baseactivity extends Activty
{
    //some stuff
}
class parent extends Baseactivity implements OnMapLoadedCallback
{
    GoogleMap map;
    void oncreate(Bundle savedIntanceState)
    {
        MapFragment mapfragment;
        mapfragment.setOnMapLoaderCallback(this);
        //map.addmarker.
    }

    @Override
    public void onMapLoaded()
    {
        map=((MapFragment)getMapFragment.findFragmentById(R.id.map)).getMap();
    }
}

【问题讨论】:

  • 你在哪里将片段附加到活动中?提交事务,然后像 ianhanniballake 说的那样使用 getMapAsync,然后您将直接在回调中收到您的 GoogleMap 实例。
  • 我无法将片段扩展到活动,因为我正在扩展 BaseActivity,它是 Activity 的基类,并且 BaseActivity 有一些我必须在我的主 Activity 中使用的东西。

标签: java android google-maps-android-api-2 supportmapfragment


【解决方案1】:

根据getMap() documentation:

此方法已弃用。 请改用getMapAsync(OnMapReadyCallback)。回调方法为您提供了一个保证为非空且可以使用的 GoogleMap 实例。

getMap() 不能保证返回非空映射,因为它需要一些时间来准备 - 使用 OnMapReadyCallback 并在回调中执行映射初始化步骤。

【讨论】:

  • 我在 map.setOnMapLoadedCallback(this) 处收到 NullpointerException。
  • 我也有同样的问题,有什么解决办法吗?
  • @Nitin - 您的代码将“map”作为“GoogleMap”,但“setOnMapLoadedCallback()”是“MapFragment”的一种方法。您可以发布您尝试运行的更新代码吗?
  • class Baseactivity extends Activty { //some stuff } class parent extends Baseactivity implements OnMapLoadedCallback { GoogleMap map; void oncreate(Bundle savedIntanceState) { MapFragment mapfragment; mapfragment.setOnMapLoaderCallback(this); //map.addmarker。 } @Override public void onMapLoaded() { map=((MapFragment)getMapFragment.findFragmentById(R.id.map)).getMap(); } }
  • 看起来您实际上并未在代码中的任何位置使用getMapAsync()。确保您至少使用 Google Play Services 6.5,然后实际使用 getMapAsync()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-29
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
相关资源
最近更新 更多