2011-11-24 8 views
0

我正在爲雙屏android設備編寫應用程序。控制流程,同時通知適配器和射擊意圖

我有一個通知適配器(在一個屏幕上,即在RightActivity上顯示)的方法(在按下按鈕時調用),然後觸發另一個屏幕上顯示的地圖的意圖(即LeftActivity)。方法如下:

public void onClick(View v) { 

    MyAction.fireIntentToMap(context, myList); // fire intent to map on the left screen 
    MyListAdapter.notifyDataSetChanged(); // adapter is for listview displayed on right screen 
} 

我想那是什麼,其目的首先應該被炒到地圖活動左邊屏幕上,並且只有在(顯示項目即圖中的意圖收到)應該通知列表適配器並且列表視圖應該自行刷新。

但是,這不會發生。會發生什麼情況是,調用進入fireIntenToMap方法,並且意圖被觸發(即致電startActivity(intent);)。但是,在地圖接收到意圖之前,行MyListAdapter.notifyDataSetChanged();會執行,並且刷新列表視圖。這樣做的目的是由地圖後收到。

爲什麼會出現這種情況?我怎樣才能得到一個單一線程的行爲(圖進程的意圖,然後再列表刷新視圖)在這裏?

回答

0

由於您注意到,您無法控制何時Intent實際上「已交付」。

有幾種解決方案可以解決您的問題,但IMO最優雅的就是使用ordered broadcasts。因此,您的地圖和列表會動態地註冊以接收您的廣播,並設置優先級,以便按照所需的順序進行調用。

當您通過'Context.registerReceiver(..)'註冊接收廣播時,優先級設置爲'intentFilter.setPriority(..)'

然後你用`Context.sendOrderedBroadcast(..)'觸發廣播。

+0

感謝您的迴應,但我沒有向「MyListAdapter」發射意圖。我只在它上面調用'notifyDataSetChanged()'。 – Vaibhav

+0

是的,但是你在地圖上發生了事件,對吧? –

相關問題