この記事において前提としていること
Android Studio 3.0.1 でアンドロイド開発の勉強をしています。
Fragmentを理解する必要があることを悟り、Fragmentを用いてタブを実装するチュートリアル(?)を写経しました。
Google Map Activityを追加する
AndroidStudioのプロジェクト名の上で右クリック → New → Google → Google Map Activityをクリックして自分のプロジェクトにGoogleMapのアクティビティを追加。
生成されたgoogle_maps_api.xmlにご丁寧にも"TODO: Before you run your application, you need a Google Maps API key. To get one, follow this link, follow the directions and press "Create" at the end:"という説明書きとともにAPIキー取得のURLが書かれていたので、そのページからAPIキーを取得。
キーを以下の所に追加。
<string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">ここ</string>
MainActivity.javaでcom.google.android.gms.maps.MapFragment;
をimport。
FragmentTabHost#addTab()の第二引数にTabのContentとなるクラスを渡しているので、MapFragment.class
を渡してあげる。
エミュレータを起動し、GoogleMapを追加した”TAB 3”を選択すると、以下の画像のようにGoogleMapが表示されました!
実質3行に手を加えるだけでGoogleMapが追加できました。すごい。
最終的なMainActivity.java
package com.example.kouhei.tabapplication;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTabHost;
import android.os.Bundle;
import com.google.android.gms.maps.MapFragment; // MapFragmentをimport
public class MainActivity extends FragmentActivity {
private FragmentTabHost mTabHost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTabHost = (FragmentTabHost)findViewById(R.id.tabhost);
mTabHost.setup(this, getSupportFragmentManager(), R.id.tabContent);
// "FragmenteTab"は自分で実装するクラス
// addTab()の第一引数がTabSpec、第二引数は表示するFragmentをclass名で渡す。第三引数はFragmentで読み込むデータをBundleで渡す。
// TabSpecはタブの情報
// setIndicator()はタブのView
mTabHost.addTab(
mTabHost.newTabSpec("tab1").setIndicator("Tab 1", getDrawable(R.drawable.ic_spa_black_24dp)),
FragmentTab.class,
null);
mTabHost.addTab(
mTabHost.newTabSpec("tab2").setIndicator("Tab 2", getDrawable(R.drawable.ic_sentiment_satisfied_black_24dp)),
FragmentTab.class,
null);
mTabHost.addTab(
mTabHost.newTabSpec("tab3").setIndicator("Tab 3", getDrawable(R.drawable.ic_android_black_24dp)),
MapFragment.class, // ここに書いてあったFragmentTabを書き換えました。
null);
}
}