使用地图片段活动

Posted

技术标签:

【中文标题】使用地图片段活动【英文标题】:Working with Map Fragment Activity 【发布时间】:2016-07-12 09:37:32 【问题描述】:

我正在尝试使用谷歌地图片段创建一个基本活动。现在我有这个:

public class MainScreen extends AppCompatActivity 
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_screen);

        // add the map fragment to the activity
        if (findViewById(R.id.fragment_container) != null) 
             if (savedInstanceState != null)  return; 
             getSupportFragmentManager().beginTransaction()
             .add(R.id.fragment_container, new FragmentGoogle()).commit();
        
    


public class FragmentGoogle extends android.support.v4.app.Fragment 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
        return inflater.inflate(R.layout.map_google, container, false);
    

这是什么产生的:

我的问题是:如何与片段本身进行交互?假设我想放大 Sidney。我应该将代码放在 MainScreen.class 还是 Fragment.class 中?我应该使用哪些方法?这是我第一次使用片段。

【问题讨论】:

你也应该包含你的 .xml。此外,您可以从官方谷歌地图开始学习 android 教程和大量免费教程,如 android hive、vogella 或 codepath。这应该不是什么难题。 你不需要为fragment创建一个类,你可以直接从主活动类中创建。我建议你试试这个教程tutorialspoint.com/android/android_google_maps.htm 【参考方案1】:

您无需创建自己的 FragmentGoogle。您可以使用 com.google.android.gms.maps.SupportMapFragment 并通过您的活动代码控制它。

在布局中:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    android:id="@+id/map"
    tools:context=".MapsActivity"
    android:name="com.google.android.gms.maps.SupportMapFragment" />

然后在Activity代码中:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback 

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    

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

        // Add a marker in Sydney, Australia, and move the camera.
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    

代码取自 this tutorial足以启动和使用Google Maps Android API的大部分功能,只需按照步骤操作即可:)

【讨论】:

【参考方案2】:

假设您在一个新项目中有一个空活动。 做这个 : creating premade android map activity

然后你会得到这样的东西: your project structure

转到谷歌地图 api 并按照他们在 (TODO) 中告诉你的操作

在谷歌地图平台上创建一个帐户和一个项目https://console.cloud.google.com/google/maps-apis/ 点击按钮激活安卓开发,您必须寻找它 然后去key部分创建新的api key 回到android studio,点击图中黄色的xml文件 把你的钥匙过去了 所以现在 Map 活动应该给你一个真实的地图,一切都应该工作,如果你进入地图活动,你应该看到地图 但现在您想要的是在 MainActivity 中添加该地图。(我将其命名为 ActivityMain 因为 MapActivity 和 MainActivity 看起来相同) 现在您需要做的就是复制 xml 文件 activity_maps.xml 的片段,除了 id 之外不更改任何内容。 这是 activity_main.xml :
    <?xml version="1.0" encoding="utf-8"?>
    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/map1"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_
    android:layout_
    tools:context=".MapsActivity" />
我尝试在这里添加一个按钮,但我不能。所以我所做的是复制片段本身并将其放入 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_
  android:layout_
  android:orientation="vertical"
  android:gravity="center"
  tools:context=".ActivityMain">

      <Button
        android:id="@+id/button1"
        android:layout_
        android:layout_
        android:text="Start" />

        <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:map="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_
        android:layout_
        tools:context=".MapsActivity" />

  </LinearLayout>
我认为这些都是创建问题中图片的所有步骤。 我希望这对阅读有用而不是痛苦。

【讨论】:

以上是关于使用地图片段活动的主要内容,如果未能解决你的问题,请参考以下文章

如何在地图片段活动上显示按钮

活动和片段中的多个谷歌地图

如何从片段外部清除/重置地图?

如何将活动 UI 的点击传递到地图片段以将地图更改为 MAP_TYPE_HYBRID

恢复后地图片段为黑色

getSupportFragmentManager() 在活动扩展片段中未定义