読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

Fragment,Android間の通知_1

Android

概要

FragmentからActivityへの通知方法、FragmentからActivityからの通知方法をまとめる

詳細

FragmentからActivityへの通知方法

ActivityにInterfaceを実装し、FragmentでonViewCreatedを使いviewをとりだし、そこでリスナーを介してActivityにcallbackする

Actiivty

public class MainActivity extends Activity implements PlaceholderFragment.MainFragmentListener {
    ....

    @Override
    public void onNextButtonClicked() {
        Log.i("test", "clickFromFragment");
    }

Fragment

public class PlaceholderFragment extends Fragment{

    public interface MainFragmentListener {
        public void onNextButtonClicked();
    }

    MainFragmentListener mainFragmentListener;

    public PlaceholderFragment() {
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        mainFragmentListener = (MainFragmentListener)activity;
    }
    
    ....

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        mTextView = (TextView)view.findViewById(R.id.clickText);
        mTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mainFragmentListener.onNextButtonClicked();
            }
        });

        super.onViewCreated(view, savedInstanceState);
    }

FragmentからActivityからの通知方法

ActivityからFragmentへ情報をわたすには、Fragmentに用意したメソッドを呼ぶ
その際、適切にFragmentのインスタンスを取得する必要がある
レイアウトXMLで定義されているFragmentならgetFragmentById()
ソースから追加したFragmentなら生成したインスタンスを保存しておくかgetFragmentByTagで取得する

だが、ViewPagerなどで自動で追加されるFragmentと通信するのは少し勝手が違う
それはまた後日まとめる

参考

tatsu-zine.com