我在使用LocalbroadcastManager将数据从一个片段传输到另一个片段时遇到问题。
FragmentA有editText,点击它将启动FragmentB。FragmentB有一个项目列表,单击我想将数据传递给FragmentA的每个项目。
这是我的实现。
public class FragmentA extends Fragment {
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String highSchoolName = intent.getStringExtra("HighSchoolName");
}
};
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LocalBroadcastManager.getInstance(getContext()).registerReceiver(mMessageReceiver, new IntentFilter("HighSchoolEvent"));
}
@Override
public void onDestroyView() {
super.onDestroyView();
LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(mMessageReceiver);
}
下面是广播消息发送的片段B。
public class FragmentB extends Fragment {
mHighSchoolListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
HighSchool highSchoolItem = mHighSchoolAdapter.getItem(position);
sendHighSchoolItemToSignupForm(highSchoolItem);
}
});
private void sendHighSchoolItemToSignupForm(HighSchool highSchoolItem) {
Intent intent = new Intent("HighSchoolEvent");
intent.putExtra("HighSchoolName", highSchoolItem.getName());
LocalBroadcastManager.getInstance(getContext()).sendBroadcast(intent);
getActivity().onBackPressed();
}
}
调试/日志记录从未命中广播接收器的onReceive消息。少了什么吗?谢谢你的建议。
onAttach()生命周期
方法中捕获接口实现,然后可以调用接口方法以与活动通信 UpdateFragmentA update;
public interface UpdateFragmentA {
public void update_fragment(String data);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
update= (UpdateFragmentA ) getActivity();
}catch (Exception e)
{
e.printStackTrace();
}
}
// set setOnItemClickListener for List View
listview.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
{
update.update_fragment(items[position]);
}
});
正如J Ramesh所建议的,通过将片段事务类型从replace
更改为add
,解决了这个问题。
下面是片段事务。
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
transaction.add(android.R.id.content, new FragmentA())
.addToBackStack(null).commit();
如果“launch”表示您将片段A
替换为片段B
,那么您就错了。。
您应该将片段B
添加到backstack
FragmentTransaction#addToBackStack(String fragmentName);
你应该这么做
FragmentTransaction#add()
而不是
FragmentTransaction#替换()
添加:将向容器添加另一个片段视图
替换:将容器中的所有内容替换为另一个片段
我确信你正在用片段B替换片段A,在这种情况下,你的片段A将被销毁,片段B将被加载,你将无法在片段A中收听更新
我有一个活动和两个片段的包含一个。现在我可以通过实现谷歌的指南回调界面从片段到活动进行通信。但是我如何从活动到片段的另一种方式交流呢?如果活动(外部事件)中发生了什么,我想更新片段。我设法得到了Frag1碎片 但当我在frag上调用公共方法时,我得到了一个IllegalStateException:片段未附加到Activity,可能是因为getItem(0)返回了Frag1的一个新实例,而该实例尚
是否有一种方法可以检查堆栈中的前一个片段是否是包含SupportMap的片段?
我正试图做到这一点:http://android-er.blogspot.com/2012/06/communication-between-fragments-in.html只不过我用的是一台碎纸机 我有一个有两个片段的活动 FragmentA有一个编辑文本和一个按钮,FragmentB有一个文本视图 现在我想要的是,每当我在编辑文本中输入一些内容并单击按钮时,我的文本视图中就会出现一些内容。
我有一个片段和一个对话框片段,我想在它们之间进行通信:将数据从片段发送到对话框片段,并将数据从对话框片段发送到片段 我阅读了有关和的信息,但我不明白如何正确使用它们向/从发送/接收数据。 任何帮助?
问题内容: 需要专家意见,我应该如何构造这个问题。我有一个自定义方法 process_filter ,它驻留在一个片段中,因为它需要访问私有和该片段。 在处理过程中,此片段将访问一个,并且在其中我需要使用back process_filter 方法 基本上,这里是结构: MyFragment.java MyAdapter.java 问题答案: 创建一个从适配器到片段的接口。 在适配器中创建接口,并
Hy,我是android开发的新手,我正在尝试在我的自定义对话框片段(扩展了DialogFragment并包含四个按钮)和view Pager中的片段之间建立一个通信。 我的视图分页器适配器扩展了FragmentStatePagerAdapter并包含7个选项卡,但对于每个选项卡,我创建了相同的片段,该片段具有一个recyclerView,但用于列表的数据不同。这个想法是,如果我单击对话框片段中的