Fragmentを勉強する その1

Fragmentの紹介してるブログや記事、分かりにくいのが多すぎる気がする。

というのも、android2.3とかではsupportLibraryを使う必要があったけど、android4以降では必要なかったりして、何が正解なのか分からないのと目的もわからず、作ってるのが多いので、なので、今回は目的を明確にします。

・Activityのページ遷移をfragmentで実装してしまう。

という事を目的にします。タブレットの表示と、スマホの表示を分けたいとかの人は、今回はちょっと違います。

また、最初からfragmentを配置などもできるようですが、それも別の機会で考えます。

メインのxml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:id="@+id/frag"
 tools:context="com.example.fragmenttest.MainActivity" >
</FrameLayout>

として、Activityは継承はActivityで大丈夫です

一方で、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 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:background="#666666"
 android:orientation="vertical" >
 <TextView
 android:id="@+id/textView1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="1" />
</LinearLayout>

とします。

そしてメインのActivityのOnCreateに

FragmentManager fragmentManager = getFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
Fragment1 frag1 = new Fragment1(); 
fragmentTransaction.replace(R.id.frag, frag1); 
fragmentTransaction.commit();

とかけば、fragmentが表示されます

R.id.frag

は割となんでもいいようで、最初間違えて、fragmentを指定していたのですがfragmentの中にfragmentが入ってしまって、いたので注意ポイントです。

で、例えば、タイマー設定とかして※Fragment2っていう、ほぼ同じfragmentを作成

FragmentManager fragmentManager = getFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
Fragment2 frag2 = new Fragment2();
fragmentTransaction.replace(R.id.frag, frag2); 
fragmentTransaction.commit();

とするとfragmentを上書きしてくれます。fragment1ではonDestoryなども呼ばれます

fragmentTransaction.add()

っていうのを使っているサンプルも多いのですが、これは上に乗せる形になるので、できればメモリ的に避けたいです。replaceを推奨です

で、fragmentを終了させるには

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(fragmentManager.findFragmentById(R.id.frag));
fragmentTransaction.commit();

こんな感じで、fragmentの差し替えを行う事をできました。

  • written on 2015.07.01
  • category : fragment

前後の記事

前の記事:

次の記事:

関連の記事

コメントの投稿

  • サイト内検索

新作アプリの紹介

関連サイトの紹介

アンドロイドアプリ開発TIPS
きぐるみカメラ
ふらいぱん
アンドロイドのデザイン集
Page top↑