2016-08-16 94 views
0

我的活動包含通過XML嵌入的片段A,其包含也通過XML嵌入的片段B.從通過XML加載的片段中的片段訪問活動

當我調用B.getActivity()我沒有返回。有沒有一種簡單的方式從B訪問活動?

+0

你想要活動方法訪問嗎? –

+1

請確保您在onAttach中或之後調用getActivity – Ramit

回答

1

我知道這是一個無法回答的問題,但試圖從你的片段控制你的活動是一種不好的做法。

如果您需要引用活動來獲取上下文或其他東西,那麼您只需在片段中使用getActivity()。如果您通過B.getActivity()引用該類,則它將爲空,因爲您沒有查看類的實例,而是查看類構造。由於在創建片段之前沒有附加Activity(即使這種情況發生在XML中),引用ClassName.getActivity()不會給你任何東西。所以只需撥打getActivity()就可以了。

處理碎片和活動之間通信的最佳方式是使用接口和回調來發送特定信息。你不應該從片段控制你的應用,活動應該這樣做。你只需要從Fragment發回一小段信息回你的父活動。

例子:在您的片段:

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 
    } 
}