2017-11-13 22 views
0

親アクティビティとフラグメント間の通信が可能なインターフェイスの作成に関する公式のAndroidドキュメントを読んでいます。だから私はやったが、親アクティビティから値を取得するメソッドの1つを呼び出すと、自分のアプリケーションがクラッシュする。私のフラグメントに、このようなインターフェイスを持っている場合Android - フラグメントから親アクティビティの変数を正しく取得する方法

は私の呼び出し元の活動でpublic interface InteractWithFragmentA { String getStringText(); }

私はダミーテキスト

@Override 
public String getStringText(){ return "Some dummy text";} 

私だFragmentA.java内の変数を持っているとそれをテストしましたホストアクティビティへの参照であり、InteractWithFragmentAにキャストされていますが、メソッドを呼び出すと

_hostActivity.getStringText()

アプリがクラッシュします。私が紛失しているものがありますか?私は、ホストアクティビティの変数をpublicやstaticなどの方法で取得する方法をいくつか提案しましたが、そのアクティビティにフラグメントを結合しないようにしています。前もって感謝します。

+0

からこれを試してみてください? – riadrifai

答えて

1
ヨはこれを行う必要があり

活動

public class YourActivity implements YourActivityInterface{ 
    @Override public String getStringText(){ return "Some dummy text";} 
} 

インタフェースを

public interface YourActivityInterface { 
    String getStringText(); 
} 

断片

public class YourFragment extends Fragment { 

    YourActivityInterface mListener; 

    //your method... 
    mListener.getStringText() 


@Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     if (context instanceof YourActivityInterface) { 
      mListener = (YourActivityInterface) context; 
     } else { 
      throw new RuntimeException(context.toString() 
        + " must implement YourActivityInterface"); 
     } 
    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 
     mListener = null; 
    } 
    } 
+0

問題を解明しました。私のアクティビティのgetSomethingメソッドがnull値を返していました。私はモックのデータでそれをテストし、それがうまくいっていれば、その問題が何かを理解しました。 – daniekpo

+0

助けてくれてありがとう – daniekpo

0

はあなたのlogcatを投稿できるフラグメント

((YourActivity) getActivity()).getStringText(); 
+0

私は実際にそのようなアクティビティにフラグメントを結合するのを避けようとしていました。私は問題が何かを考え出した。私はヌル値を返していました。私はあなたの助けに感謝します。 – daniekpo