【Android】MenuとToolBar、TabLayout + ViewPagerを実装する。

# Menu

```java

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
      MenuInflater menuInflater = getMenuInflater();
      menuInflater.inflate(R.menu.main, menu);
      return super.onCreateOptionsMenu(menu);
  }
```

```xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/menu_search"
        android:icon="@drawable/action_search"
        android:title="search"
        app:showAsAction="ifRoom|collapseActionView"
        app:actionViewClass="android.support.v7.widget.SearchView"/>

    <item android:id="@+id/search_history"
        android:title="SearchHistory" />
</menu>
```

## Menuの項目が選択された際の処理を実装する

```java
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.search_history:
            Intent intent = new Intent(this, SearchHistoryActivity.class);
            startActivity(intent);
    }
    return super.onOptionsItemSelected(item);
}
```

## 階層的なメニューを表示する。

```xml
<item android:id="@+id/file"
    android:title="file" >
    <!-- "file" submenu -->
    <menu>
        <item android:id="@+id/create_new"
            android:title="create_menu" />
        <item android:id="@+id/open"
            android:title="open" />
    </menu>
</item>
```

# ToolBar
```java
Toolbar toolbar = (Toolbar) findViewById(R.id.toolBar);
setSupportActionBar(toolbar); // ToolBarを表示する
```

```xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:minHeight="?attr/actionBarSize"
    android:fitsSystemWindows="true"
    android:id="@+id/toolBar"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
</android.support.v7.widget.Toolbar>
```

### Backボタン(homeボタン)を有効にする

```java
Toolbar toolbar = (Toolbar) findViewById(R.id.toolBar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true); // 戻るボタンが表示される。
getSupportActionBar().setHomeButtonEnabled(true); // 戻るボタンが押せるようになる。
```

### Backボタンの処理を実装する

```java
@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case android.R.id.home:
            Intent intent = new Intent(getApplicationContext(), MainActivity.class);
            intent.putExtra(FROM_SEARCH_HISTORY, "Java");
            startActivity(intent);
        default:
            break;
    }
    return super.onOptionsItemSelected(item);
}
```

# TabLayout + ViewPager


```java
tabLayout = (TabLayout) findViewById(R.id.tabLayout);
viewPager = (ViewPager)findViewById(R.id.viewPager);
viewPagerAdapter = new ViewFragmentPagerAdapter(getSupportFragmentManager());
viewPagerAdapter.addFragments(searchFragment, "Search");
viewPagerAdapter.addFragments(new TrendFragment(), "Trend");
viewPagerAdapter.addFragments(new SubFragment(), "Sub");
viewPager.setAdapter(viewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);

```

```java
public class ViewFragmentPagerAdapter extends android.support.v4.app.FragmentPagerAdapter {

    ArrayList<Fragment> fragments = new ArrayList<>();
    ArrayList<String> tabTitles = new ArrayList<>();

    public ViewFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    public void addFragments(Fragment fragments, String tabTitles){
        this.fragments.add(fragments);
        this.tabTitles.add(tabTitles);
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override
    public int getCount() {
        return fragments.size();
    }


    @Override
    public CharSequence getPageTitle(int position) {
        return tabTitles.get(position);
    }
}
```

```xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.atuski.qiitaqlient.MainActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:id="@+id/appBar"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <include android:layout_height="wrap_content"
            android:layout_width="match_parent"
            layout="@layout/main_tool_bar_layout" />

        <android.support.design.widget.TabLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/tabLayout"
            app:tabMode="fixed"
            app:tabGravity="fill">
        </android.support.design.widget.TabLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_below="@+id/appBar"
        android:layout_height="match_parent"
        android:id="@+id/viewPager">

    </android.support.v4.view.ViewPager>
</RelativeLayout>

```