【发布时间】:2014-09-15 15:37:44
【问题描述】:
我正在一个刚刚实现 ViewPager 的应用程序中工作。我第一次使用选项卡,但是当我对 ViewPager 进行更改时,我开始遇到从 Activity 到 Fragment 的数据传输问题。
我终于找到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,我的问题是,如何在 Fragment 中管理另一个 Intent 的传入?
我必须创建另一个 BroadcastReceiver 来管理新的 Intent,还是可以在同一个 BroadcastRecevier 中管理新的 Intent?我看到我可以在 BroadcastReceiver 的 onReceive() 方法中使用if 来检查传入的意图过滤器,但是如果我在同一个片段中声明两个不同的意图过滤器,如何将它们分配给 BroadcastReceiver?
【问题讨论】:
标签: android android-intent android-fragments