我正在使用ViewPager的應用程序中工作。我第一次使用標籤,但是當我對ViewPager進行更改時,我開始對從Activity到片段的數據傳輸產生問題。用於多種意圖的LocalBroadcastManager
我終於找到了this post這個問題的解釋,並建議在使用ViewPager時使用LocalBroadcastManager從Activity發送數據到Frament。我已經實現這個代碼,並能正常工作:
Fragment1.java
現在public class Fragment1 extends Fragment {
public static final String ACTION_INTENT = "fragment1.action.BOX_UPDATE";
/*Register the receiver*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IntentFilter filter = new IntentFilter(ACTION_INTENT);
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(ActivityDataReceiver, filter);
}
/*Broadcast Receiver*/
protected BroadcastReceiver ActivityDataReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(ACTION_INTENT.equals(intent.getAction())) {
String text = intent.getStringExtra("TEXT");
witeOnBox(text);
}
}
};
/*Method which changes the text with the icoming value*/
public void witeOnBox(String text) {
tv_log.setText(text);
}
/*Unregister receiver*/
@Override
public void onDestroy() {
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(ActivityDataReceiver);
super.onDestroy();
}
,在MainActivity我的數據這種方式發送到片段:
protected void sendValueToFragment1(String text) {
Intent intent = new Intent("fragment1.action.BOX_UPDATE");
intent.putExtra("TEXT", text);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
現在我需要其他發從MainActivity的數據到相同的Fragment1,我的問題是,我如何在片段中管理另一個意圖的傳入?
我是否必須創建另一個BroadcastReceiver來管理新的Intent,還是可以在同一個BroadcastRecevier中管理新的意圖?我發現我可以在BroadcastReceiver的onReceive()方法中使用if
來檢查傳入的意圖過濾器,但是如果我在同一個片段中聲明瞭兩個不同的意向過濾器,我如何將它們分配給BroadcastReceiver?
這就是我的方式是這樣做執行LocalBroadcastManager前,它不工作。正如gunar在鏈接文章中所說的那樣:「您無法直接訪問位於ViewPager中的碎片,因此您無法直接引用它們。」 – masmic
好吧我沒有看到這一點。關於你的問題,那麼你應該使用相同的廣播接收機,你應該改變標籤。然後檢查Fragment中的TAG以調用不同的方法。 – johng