2016-08-16 9 views
0

私のアクティビティには、XMLで埋め込まれたフラグメントAが含まれています。XMLを介してロードされたフラグメント内のフラグメントからアクティビティにアクセス

私がB.getActivity()を呼び出すと、返されません。 Bからアクティビティにアクセスする簡単な方法はありますか?

+0

アクティビティメソッドにアクセスしますか? –

+1

onAttach以降でgetActivityを呼び出していることを確認してください – Ramit

答えて

1

私はこれが少し答えていないことを知っていますが、あなたの断片からあなたの活動をコントロールしようとするのは悪い習慣です。

コンテキストを取得するためにアクティビティを参照する必要がある場合は、フラグメント内にgetActivity()を使用してください。 B.getActivity()を介してクラスを参照する場合は、クラスのインスタンスではなく、クラスの構造を調べているので、nullになります。フラグメントが作成されるまでアクティビティが添付されていないので(ClassName.getActivity()を参照しても何も表示されません)。それではgetActivity()に電話してください。

フラグメントとアクティビティ間の通信を処理する最善の方法は、インターフェイスとコールバックを使用して特定の情報を送信することです。あなたは断片からあなたのアプリを制御してはならない、活動はそれを行う必要があります。あなたはあなたの断片からあなたの親の活動に小さな情報を送り返す必要があります。

例:あなたの断片では:あなたの活動に

private OnFragmentInteractionListener mListener; 

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

//the way to pass information here. Can use return values if you'd like 
//this is what the activity needs to implement 
public interface OnFragmentInteractionListener { 
    void thingHappened(String theInformation); 
} 

//when that thing happens that you want to communicate you call back to the 
//activity like so: 
public void someAction() { 
    mListener.thingHappened("the information"); 
} 

、あなたがMyFragmentClass.OnFragmentInteractionListenerを実装して、あなたがメソッドをオーバーライドすることにより、両者の間に渡された情報を処理することができます。

public class MyActivity extends AppCompatActivity implements MyFragment.OnFragmentInteractionListener{ 
// most of the code here... 

    //now implement the listener. 
    @override 
    public void thingHappened(String information){ 
     //what you want the activity to do with the information 
    } 
} 
関連する問題