我想在這個特定的情況下,最好的辦法是調解模式。我實際上已經在與原始問題相關的應用程序的另一部分中實現了它。上面的JustSoAmazing的答案僅僅是從SearchAdapter到MainActivity的「消息」,但不是所有到達預期接收者的方式,即WatchListFragment。當然,我們總是可以在MainActivity中實現接口,以便將消息轉發到WatchListFragment。然而,這個解決方案更通用,可以被任何實現AppMediatorInterface的類發送任何消息,使得它非常靈活。
首先我們定義了一個希望訂閱通知的類必須實現一個接口。
AppMediatorInterface。java的
public interface AppMediatorInterface {
public void onAppMediatorNotification(Object sender, Object data);
}
其次,我們定義實際的中介類,我選擇,使其靜態使它容易獲得應用程序的任何地方。
AppMediator.java
public class AppMediator{
protected static List<AppMediatorInterface> observers = new ArrayList<AppMediatorInterface>();
public static void addObserver(AppMediatorInterface observer){
observers.add(observer);
}
public static void removeObserver(Object observer){
int pos = observers.indexOf(observer);
if(pos>-1)
observers.remove(pos);
}
public static void notifyObservers(Object sender, Object data){
for(int i=0; i<observers.size(); i++){
observers.get(i)).onAppMediatorNotification(sender, data);
}
}
}
發送通知:
SearchAdapter.java
AppMediator.notifyObservers(this, "Add-button clicked");
接收通知:
WatchListFragment.java
public class WatchListFragment extends Fragment implements AppMediatorInterface{
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
AppMediator.addObserver(this);
}
@Override
public void onDestroy() {
AppMediator.removeObserver(this);
super.onDestroy();
}
/* --- AppMediatorInterface --- */
@Override
public void onAppMediatorNotification(Object sender, Object data) {
// Do something...
}
}
最後我用一個完全不同的解決方案都在一起。起初我會讓我的WatchListAdapter擴展ArrayAdapter,但是我意識到如果我讓它們都擴展SimpleCursorAdapter的公共子類,我可以重用我的SearchAdapter中的幾乎所有代碼(它擴展了SimpleCursorAdapter)。因此,按下SearchAdapter中的按鈕會導致數據庫向我的數據庫中的watchlist_table添加條目。 WatchListAdapter在我的數據庫中訂閱一個自定義onChange-listener,並在watchlist_table中執行插入/更新/刪除操作時收到通知。希望可以幫助別人! – BadCash