当前位置: 首页 > 知识库问答 >
问题:

Android-从活动添加标记到片段映射

蔡弘扬
2023-03-14

我需要从 MainActivity 向 Android Google 地图(片段)添加标记

这是我的代码;

class Map extends android.app.Fragment implements OnMapReadyCallback


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.activity_mapa, container,false);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        MapFragment fragment = (MapFragment)getChildFragmentManager().findFragmentById(R.id.map);
        fragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        LatLng marker = new LatLng(19.33978502, -99.19086277);
        googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(marker, 15));
        googleMap.addMarker(new MarkerOptions().title("Marca de Prueba 1").position(marker));
    }
}

我想在这里添加一个标记:

所有这些都是因为我想从我的主要活动中与我的地图进行交互,其中我有一些按钮和编辑文本

主要活动

public class MainActivityextends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener
{

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

    FragmentManager fm = getFragmentManager();
    fm.beginTransaction().replace(R.id.content_frame, new Mapa()).commit();
}

这是它的样子,已经有了一个标记,但是我需要在MainActivity中设置它,而不是从map activity中调用它

共有1个答案

蒲功
2023-03-14

您只需要在片段中定义一个可以从Active调用的公共方法:

class Mapa extends android.app.Fragment implements OnMapReadyCallback

    GoogleMap mMap;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.activity_mapa, container,false);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        MapFragment fragment = (MapFragment)getChildFragmentManager().findFragmentById(R.id.map);
        fragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
    }

    //Added public method to be called from the Activity
    public void placeMarker(String title, double lat, double lon) {
      if (mMap != null) {
        LatLng marker = new LatLng(lat, lon);
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(marker, 15));
        mMap.addMarker(new MarkerOptions().title(title).position(marker));
      }
    }
}

然后,在活动中,保留对片段的引用,以便您可以调用< code>placeMarker()方法:

public class MainActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {

  private Mapa mMapFragment;

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

      mMapFragment = new Mapa();
      FragmentManager fm = getFragmentManager();
      fm.beginTransaction().replace(R.id.content_frame, mMapFragment).commit();
  }

  private void placeMarkerInMap(String title, double lat, double lon) {
    if (mMapFragment != null) {
       mMapFragment.placeMarker(title, lat, lon); 
    }
  }
}

然后,当用户填写EditText并单击按钮时,您可以在Active中调用place eMarkerInMap()方法。

请注意,如果尝试在执行 onMapReady() 回调之前调用此方法,则不会有有效的 GoogleMap 引用可用于放置标记。如果需要在从活动初始启动时放置标记,则需要在 FragmentTransaction 中使用参数。有关更多详细信息,请参阅此处。

 类似资料:
  • 代码如下:- 产品片段: 我不知道我错在哪里。我已经搜索了错误,甚至尝试了以下链接的解决方案: Fragment MyFragment not attached to activity 我在SO上提出问题,但没有得到响应/答案。可能有一个小错误、语法/格式问题或重复问题,但我的案例可能与其他人的不同。 因此,请提供帮助并作出答复。 谢谢。 --编辑-- 家庭活动: 致命异常:主进程:com.pis

  • 我正在学习Android Udacity课程,它已经过时了,所以我尝试通过手动添加一个片段到主活动中来更新它。这段代码构建得很好,但是当应用程序启动时,在android monitor中出现了一个很长的错误。 XML fragment_main.xml activity_main.xml list_itemm_forecast.xml 日志 06-23 11:23:02.878 3095-3095

  • 我想在Android的一个活动中添加两个片段。但在加法时,它给出了错误; activity_main.xml 片段的布局1 片段2的布局

  • 我是Android开发的新手,我在将firebase auth从SignInActivity传递到HomeFragment上有一个问题。代码是这样的 公共类SignInActivity扩展AppCompatActivity } 这是HomeFragment片段 公共类HomeFragment扩展Fragment{ } 这是logcat 致命异常:主进程:clouwiko.dev.prasiku,P

  • //使用startActivity(intent)也不起作用//无论我做什么,应用程序都会崩溃

  • 我有一个活动,它从其他活动中获取一些字符串: 这行得通。 从这个活动< code>ShowPoints中,我想将接收到的字符串< code>points发送到它的片段< code>PointsOnMap 为此,我创建了并执行以下操作: 但是,片段<code>PointsOnMap<code>的<code>字符串点 我想知道我做错了什么。我在这里阅读了其他一些帖子,似乎我正在以正确的方式做到这一点。