Android 用于多种目的的LocalBroadcastManager
我正在一个应用程序中工作,我刚刚实现了ViewPager。我第一次使用选项卡,但当我更改ViewPager时,我开始出现从活动到片段的数据传输问题 我终于找到了解释这个问题的地方,以及在使用ViewPager时建议使用LocalBroadcastManager将数据从Activity发送到Framint的地方。我已经实现了此代码,工作正常: Fragment1.javaAndroid 用于多种目的的LocalBroadcastManager,android,android-intent,android-fragments,Android,Android Intent,Android Fragments,我正在一个应用程序中工作,我刚刚实现了ViewPager。我第一次使用选项卡,但当我更改ViewPager时,我开始出现从活动到片段的数据传输问题 我终于找到了解释这个问题的地方,以及在使用ViewPager时建议使用LocalBroadcastManager将数据从Activity发送到Framint的地方。我已经实现了此代码,工作正常: Fragment1.java public class Fragment1 extends Fragment { public static fi
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发送到同一个片段1,我的问题是,如何在片段中管理另一个意图的传入
我是否必须创建另一个BroadcastReceiver来管理新的意图,或者我可以在同一个BroadcastReceiver中管理新的意图?我发现我可以在BroadcastReceiver的onReceive()方法中使用
if
检查传入的意图过滤器,但是如果我在同一个片段中声明了两个不同的意图过滤器,如何将它们分配给BroadcastReceiver 比使用广播接收器更好的方法
Fragment frag = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":" + mPager.getCurrentItem());
if(frag!=null && mPager.getCurrentItem()==1){
((Fragment1) frag).setText(text);
}
如果在调用该片段后导航到该片段,则可以使用getActivity()使其从活动中获取变量 我最终解决了向先前定义的IntentFilter添加操作的问题:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IntentFilter filter = new IntentFilter(ACTION_INTENT);
filter.addAction(ACTION_INTENT2);
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(ActivityDataReceiver, filter);
}
然后在BroadcastReceiver中,我管理传入的操作:
protected BroadcastReceiver ActivityDataReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(ACTION_INTENT.equals(intent.getAction())) {
//Do
}
if(ACTION_INTENT2.equals(intent.getAction())) {
//DO
}
}
};
在实现LocalBroadcastManager之前,我就是这样做的,但它不起作用。正如gunar在链接帖子
中所说,您无法直接访问驻留在ViewPager中的片段,因此无法直接引用它们。
好的,我没有看到这一点。关于你的问题,那么你应该使用相同的广播接收器,你应该只改变标签。然后检查片段中的标记是否为null以调用不同的方法。