Fragment
Fragmentがサポートされる前まではActivity自身を切り替え(intent画面遷移)をしてましたが
Tab利用で画面切り替えをするときにFragmentを利用します。
ホームページを作成された方であればフレーム(frame)と思えば分かり良いと思います。
分かりにくい人は以下ソースを参照してもらえれば雰囲気がつかめるはずです。
なお参考ソースは下位APIでも利用可能とする為、support.v4とsupport.v7を利用しています。
事前に設定が必要です。
MainActivity.java
Fragment1.java (Fragment2、3はほぼ同じ内容なので省きます)Tab利用で画面切り替えをするときにFragmentを利用します。
ホームページを作成された方であればフレーム(frame)と思えば分かり良いと思います。
分かりにくい人は以下ソースを参照してもらえれば雰囲気がつかめるはずです。
なお参考ソースは下位APIでも利用可能とする為、support.v4とsupport.v7を利用しています。
事前に設定が必要です。
![]() |
| Fragment 画面1を選択 |
![]() |
| Fragment 画面2を選択 |
MainActivity.java
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 件のコメント:
コメントを投稿