ActionBar.Tab
ActionBarを利用したTabナビゲーションです。
便利系アプリとかではグっとアプリっぽくさせることができます?!
Fragnmentを学ぶ必要があります。
筆者は、他参考サイトでのソースをコピーしながら覚えましたが
どうも自分の場合、他サイトのソースをそのままコピーしてもうまく動かなかったり
同じことに悩まされた人は一旦ここのソースコピーしてもらえれば思った動きになるかもしれません
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) { } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { 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) { 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 件のコメント:
コメントを投稿