The Pragmatic Ball boy

iOSを中心にやってる万年球拾いの老害エンジニアメモ

FragmentでUnfortunately, XXX has stoppedでクラッシュする

Android StudioのNew->Fragmentで追加したFragmentを使って表示しようとすると

"Unfortunately, XXX has stopped"

というポップアップが出てクラッシュするという問題が発生。 Logにも何も出ていない・・・

どこでクラッシュしてるのかさっぱりわからなかったので、仕方なく追加したFragmentにブレークポイントをはりまくって確認したところ、onAttachを最後にお亡くなりになっていた。

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnFragmentInteractionListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

Fragmentを呼ぶActivity側をOnFragmentInteractionListener interfaceに対応させないとダメのようだ。

よって以下のようにActivityにimplements XXXFragment.OnFragmentInteractionListener を追加し、onFragmentInteractionをオーバーライドすればOK。

public class XXXActivity extends ActionBarActivity implements XXXFragment.OnFragmentInteractionListener {

/// 省略

@Override
    public void onFragmentInteraction(Uri uri) {

    }

よく見たら作成されたFragmentに"Activities that contain this fragment must implement the XXXFragment.OnFragmentInteractionListener" て書いてありましたね・・、よく読めってことか

/**
 * A simple {@link Fragment} subclass.
 * Activities that contain this fragment must implement the
 * {@link XXXFragment.OnFragmentInteractionListener} interface
 * to handle interaction events.
 * Use the {@link XXXFragment#newInstance} factory method to
 * create an instance of this fragment.
 */
public class XXXFragment extends Fragment {

追記:

Fragmentを追加する際に、optionで"Include interface callbacks?"にデフォルトでチェックが入っているため、今回のようになったようでした。

f:id:yanamura:20150131231815p:plain