TabListener
TabListenerを実装した場合、以下のメソッドが必要になります。
- onTabReselected・・・Tabが2回目以降に選択された場合に実行される
- onTabSelected・・・Tabが選択された場合に実行される
- onTabUnselected・・・Tabが選択から外れた場合に実行される
以下ソース例では下位APIでも利用可とするため
support.v7のActionBarを利用しています。stylesに指定文を書くのを忘れないでください。
![]() |
| Tab 画面2選択 |
![]() |
| Tab 画面1を選択 |
MainActivity.java
Fragment1.java (Fragment2、3はほぼ同じ内容なので省きます)public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.container);//
ActionBar ab = getSupportActionBar();
// アイコンを表示しない
ab.setDisplayShowHomeEnabled(false);
// SHOW_TITLEのフラグを消すことで、タイトル表示を消す
ab.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);//tabを利用するときの決まり文句
ab.addTab(ab
.newTab()//新規作成
.setText("画面1")//tab文字
.setTabListener(
new MainTabListener<fragment1>(this, "f1",Fragment1.class)));//読み込むclassを指定
ab.addTab(ab
.newTab()
.setText("画面2")
.setTabListener(
new MainTabListener<fragment2>(this, "f2",Fragment2.class)));
ab.addTab(ab
.newTab()
.setText("画面3")
.setTabListener(
new MainTabListener<fragment3>(this, "f3",Fragment3.class)));
ab.getTabAt(1).select(); // 左:0 中:1 右:2 今回は初期tab選択位置を真ん中に指定
}
public class MainTabListener<t extends="" fragment=""> implements TabListener {
private Fragment fragment;
private final Activity activity;
private final String tag;
private final Class<t> cls;
public MainTabListener(Activity activity, String tag, Class<t> cls) {
this.activity = activity;
this.tag = tag;
this.cls = cls;
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {//Tabが2回目以降に選択された場合に実行される
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {//Tabが選択された場合に実行される
if (fragment == null) {
fragment = Fragment.instantiate(activity, cls.getName());
ft.replace(R.id.container, fragment, tag);
} else {
fragment = Fragment.instantiate(activity, cls.getName());
ft.replace(R.id.container, fragment, tag);
}
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {//Tabが選択から外れた場合に実行される
if (fragment != null) {
ft.detach(fragment);
}
}
}
}
public class Fragment1 extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.frag1, container, false);//レイアウトxmlファイルを指定
}
@Override
public void onStart() {
super.onStart();
//ここに処理内容を記載
}
}
res/layout/container.xml<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" > </FrameLayout>res/layout/frag1.xml (Fragment2、3はほぼ同じ内容なので省きます)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="画面1" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout>res/values/styles.xml
<resources> <style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">//@style/Theme.AppCompatか@style/Theme.AppCompat.Light選択必須 </style> <style name="AppTheme" parent="AppBaseTheme"> </style> </resources>


0 件のコメント:
コメントを投稿