素人のアンドロイドアプリ開発日記

fragment使い方のまとめ

2018.04.12

fragmentについては、いろいろ実験内容をこのブログで記述しましたが、結局のところ、やる事は、メインのレイアウトにつける事と外す事が主な対応にはなりそうです。

fragmentの機能として、自分でやることが整理できていれば、自分でベースとなるインターフェースを作ってみるとよいかと思います。僕が作ったのを参考に書いてみます。

public interface BaseFragment {
    //戻るボタンを押した時のふるまいを書いておく。
    public Boolean setClickReturnBtn();
    
    //アプリを削除する時のインターフェース
    void callFinish(BaseCallback callback);
    interface BaseCallback{
        void callbackFunction();
    }
}

こんな感じにしていますが、戻るボタンを押した時の動作とメインのアクティビティから削除の命令をされた時に、動作をする関数を用意しています。

MainActivity側

まずはレイアウト

<FrameLayout 
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:id="@+id/frag" >
</FrameLayout>

こんな感じにフラグメント置く場所をlayoutの中に配置をします。

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

これで設置ができます。

また、上書きをしたい時にも同じでreplaceでおくことができます。

この切り変えをactivity側で行う時に、切り替えモーションをつける場合にBaseFragmentにcallFinishをつけています。

Fragment側

public class mFragment extends Fragment implements BaseFragment{
public Boolean setClickReturnBtn(){
        //
        return false;
    }
private View rootView;
private CallbackFunction callback;
public mFragment(CallbackFunction _callback) {
callback = _callback;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.frag1, container,false);
//イベントなど設定はここでいいかも。
return rootView;
}
@Override
public void onDestroy() {
rootView = null;
callback = null;
super.onDestroy();
}
public interface CallbackFunction {
public void callback(); 
}
}

こんな感じにしています。fragment自体はcontainerがあるみたいなのですが、addViewとかで細かく対応するよりは、inflateでレイアウトをxmlから採用する方法を使っています。

setClickReturnBtnでbooleanで値を返すようにしているのですが

public boolean dispatchKeyEvent(KeyEvent event) {
 // TODO Auto-generated method stub
 if (event.getAction()==KeyEvent.ACTION_DOWN) {
 if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
 FragmentManager fragmentManager = getFragmentManager();
 BaseFragment frag = (BaseFragment)fragmentManager.findFragmentById(R.id.frag);
 if(frag != null){
 if(frag.setClickReturnBtn()){
 return false;
}
 }
 }
 }
}

mainactivity側でこんな感じに戻るボタンの判定をしたりに使ってはいたのですが、今のタイミングでは戻るボタンを効かないようにしたいタイミングがあったりすると思うのでbooleanで判定を返すしようにしておきました。

※BaseFragmentでinterfaceをつくっておけば、fragmentのクラスが何でも、basefragmentのsetClickReturnBtnを使えるので便利です。

あとはfragmentを上書きじゃなくて削除する場合は

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

こんな感じにする事で、現在のフラグメントを削除する事ができます。

同じカテゴリの記事を紹介します

activityとfragmentを使う時の自分ルールを制定Fragmentを勉強する その5Fragmentを勉強する その4Fragmentを勉強する その3Fragmentを勉強する その2Fragmentを勉強する その1

カテゴリー:fragment

公開中のアプリ、是非ダウンロードしてみてください

2chまとめのたね

RSSを利用してさまざまなブログの情報をキュレーションしてくれるアプリ

インストールする

ひらがな戦記

OPENGL ES2 を利用したカルタのソーシャルゲーム

インストールする