質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

Q&A

解決済

3回答

3848閲覧

Activity で MapViewを使う方法を教えてください。

komon4242

総合スコア21

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

0グッド

0クリップ

投稿2017/11/07 03:16

MapViewのサンプルを使ってMapViewの表示を行っていました。
サンプルではFragmentの中でMapActivityを使って実装をしていましたが、

今回はViewの一つとして使いたかったのでMapViewを使ってみました。

xml

1<?xml version="1.0" encoding="utf-8"?> 2<android.support.constraint.ConstraintLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 tools:context="hoge.example.com.googlemap.MainActivity"> 8 9 <com.google.android.gms.maps.MapView 10 android:id="@+id/mapView" 11 android:layout_width="441dp" 12 android:layout_height="319dp" 13 tools:layout_editor_absoluteX="0dp" 14 tools:layout_editor_absoluteY="0dp"/> 15 16</android.support.constraint.ConstraintLayout>

xml

1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="hoge.example.com.googlemap"> 4 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 5 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 6 <uses-permission android:name="android.permission.INTERNET" /> 7 8 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 9 10 <application 11 android:allowBackup="true" 12 android:icon="@mipmap/ic_launcher" 13 android:label="@string/app_name" 14 android:roundIcon="@mipmap/ic_launcher_round" 15 android:supportsRtl="true" 16 android:theme="@style/AppTheme"> 17 <meta-data 18 android:name="com.google.android.geo.API_KEY" 19 android:value="@string/google_maps_key" /> 20 <activity android:name=".MainActivity"> 21 <intent-filter> 22 <action android:name="android.intent.action.MAIN"/> 23 24 <category android:name="android.intent.category.LAUNCHER"/> 25 </intent-filter> 26 </activity> 27 </application> 28 29</manifest>

java

1public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { 2 3 private GoogleMap mMap; 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_main); 9 10 MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.mapView); 11 mapFragment.getMapAsync(this); // ←ここで落ちる 12 } 13 14 15 @Override 16 public void onMapReady(GoogleMap googleMap) { 17 mMap = googleMap; 18 19 // Add a marker in Sydney and move the camera 20 LatLng sydney = new LatLng(-34, 151); 21 mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); 22 CameraUpdate cUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(35.68, 139.76), 12); 23 mMap.moveCamera(cUpdate); 24 } 25}

こんな感じで実装しましたがアプリが強制終了してしまいます。
よろしければご教授お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

MapFragmentではなくMapViewを単体で使うのであれば、当然Fragmentとして扱うことはできません。
そのため、FragmentManager#findFragmentByIdで見つかるはずがありません。Activity#findViewByIdで見つけないといけません。

また、MapViewを使うということはMapFragmentが行っていたライフサイクルの管理やメモリの管理、MapViewの初期化などをあなたが実装しないといけません。
自分でリファレンスを読んだり、ウェブから情報を探すことが下手であるならやめた方がいいですね。

投稿2017/11/07 04:35

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

komon4242

2017/11/07 07:19

---- この内容は削除されました
guest

0

自己解決

こうすればMapViewでも使う事が出来る。

java

1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 setContentView(R.layout.activity_main); 5 6 // MapFragmentの生成 7 MapFragment mapFragment = MapFragment.newInstance(); 8 9 // MapViewをMapFragmentに変更する 10 FragmentTransaction fragmentTransaction = 11 getFragmentManager().beginTransaction(); 12 fragmentTransaction.add(R.id.mapView, mapFragment); 13 fragmentTransaction.commit(); 14 15 mapFragment.getMapAsync(this); 16 }

投稿2017/11/15 07:41

komon4242

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yona

2017/11/15 09:23

上記の方法はMapFragmentをJavaコードからレイアウトに追加する方法であり、レイアウトファイルで追加する方法となんら変わりがありません。 質問で探していたMapViewのみを使う方法とは異なります。 おそらくMapViewが二重に表示されている状態になっていると考えられますが、正常に動いていますか?
komon4242

2017/11/20 06:32 編集

この内容は削除されました
guest

0

---- この内容は削除されました

投稿2017/11/07 07:04

編集2017/11/07 07:05
komon4242

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問