的「乾淨」的方式恕我直言,是通過接口和註冊監聽
創建兩個接口:
public interface LocationListener{
public void onLocationAvailable(/* whatever data you want to pass */);
}
public interface LocationListenersRegistry{
public void addLocationListener(LocationListener listener);
public void removeLocationListener(LocationListener listener);
}
然後你讓你的活動實施LocationListenersRegistry
和你的片段落實LocationListener
你的活動你將有一個private ArrayList<LocationListener>
,你將添加和刪除偵聽器按照添加/刪除方法。每當您的活動接收到新數據時,它都應該處理它,然後傳遞給陣列上的所有偵聽器。
你應該和onResume
註冊和註銷自己從活動的片段,類似的東西:
onResume(){
super.onResume();
((LocationListenersRegistry)getActivity()).addLocationListener(this);
}
onPause(){
super.onPause();
((LocationListenersRegistry)getActivity()).removeLocationListener(this);
}
編輯:
您的活動實現了LocationListenersRegistry,然後將這段代碼:
public class MyActivity extends Activity implements LocationListenersRegistry {
private ArrayList<LocationListener> listeners = new ArrayList<LocationListener>();
public void addLocationListener(LocationListener listener){
listeners.add(listener);
}
public void removeLocationListener(LocationListener listener){
listeners.remove(listener);
}
and the the n只要用戶點擊菜單按鈕:
for(LocationListener l:listeners)
l.onLocationAvailable(/* pass here the data for the fragment */);
和您的片段將被實施LocationListener的
public class MyFragment extends Fragments implements LocationListener{
public void onLocationAvailable(/* receive here the data */){
// do stuff with your data
}
打招呼。感謝你的回答。如果我在任何時候都不需要位置信息,該怎麼辦?我只需要將位置「準備就緒」,這樣當我加載其他片段或按LocateMe函數時,位置信息可以傳遞給片段,或片段可以從活動中檢索它。 或者這種數據傳遞方法被認爲是「不潔淨」。哈哈 – chongzixin
好吧,你可以只存儲活動的位置和每當用戶按下菜單按鈕你調用陣列上的監聽器。 – Budius
我對這個聽衆的概念不是很好,但我慢慢理解,所以請耐心等待。所以LocationListenersRegistry方法將添加/刪除數組列表中的項目。我應該如何實現LocationListener?它只是getter/setter方法或東西? – chongzixin