新人成長記録11th

前回の記事でも書いた通り、今回はFragmentのイベントをActivityで受け取る内容となります

例えばFragment上のボタンを押した時に、Activityで処理を書きたい時などに使えます

Fragmentの実装

Fragmentにはinterfaceとボタンを押した時の処理を記述します

まず初めに、interfaceを以下のように実装します

	public interface Mylistener{
		void onClickToast();
	}

interfaceは宣言のみで実装はしない!でした
Mylistenerの部分は好きな名前で大丈夫です
void onClickToast()の部分がActivity側に実装するメソッドとなります

また、Fragmentのライフサイクルの初めに以下のようにリスナを設定します

	public void onAttach(Context context){
		super.onAttach(context);
		if(context instanceof Mylistener){
			mylistener = (Mylistener) context;
		}
	}

if文内の”context instanceof Mylistener”では、受け取ったcontextにMylistenerが実装されているかをチェックします
trueならばリスナをセットします
これでinterfaceのメソッドを使用する準備は万端です

今回はボタンを押された時にメソッドを実行したいので以下のように実装します

	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle){
		View root = inflater.inflate(R.layout.fragment,container,false);

		Button button = (Button) root.findViewById(R.id.button);
		button.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				if(mylistener != null){
					mylistener.onClickToast();
				}
			}
		});

		return root;
	}

Activityの実装

Activity側では、以下のように先ほどのinterfaceをimplementsで実装していきます

public class MainActivity extends Activity implements Fragment1.Mylistener{
    public void onCreate(Bundle bundle){
        super.onCreate(bundle);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.mainactivity);
    }
}

このままでは何も起きないですし、ビルド時に怒られてしまいます
interfaceで宣言されているメソッドをすべて実装しないといけませんね
実装結果が以下です

    public void onClickToast(){
        Toast.makeText(this,"Fragmentのボタンが押されました",Toast.LENGTH_SHORT).show();
    }

これですべての実装が完了しました
Fragment内にあるボタンを押すことでActivity上のonClickToastが呼ばれ、Toastを表示することができます

終わりに

interfaceで外部に実装することは多くあり、必要な知識であるということは、業務に触れることによって実感しています
早いうちに学ぶ機会があり、記事にすることで理解を深めることができたと思います
少しずつですが、Android開発のことを理解してくると開発が楽しくなってきます

火曜日担当:poppy



アプリ関連ニュース

お問い合わせはこちら

お問い合わせ・ご相談はお電話、またはお問い合わせフォームよりお受け付けいたしております。

tel. 06-6454-8833(平日 10:00~17:00)

お問い合わせフォーム