我正在尝试编写一个包含活动的测试应用。此活动中有两个片段,分别定义为LeftFragment
和RightFragment
。我使用getFragmentManager().findFragmentById()
来获取彼此片段的连接。通过使用该方法,我可以从LeftFragment
获取RightFragment
个对象,但不能从RightFragment
获取LeftFragment
个对象。它只是单向工作。我这样做,因为我想从其他片段调用一些操作,返回一些值。我在考虑使用EventBus,但我也失败了。我该如何实现呢?
这是我的LeftFragment
public class LeftFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
RightFragment rightFragment = (RightFragment) getFragmentManager().findFragmentById(R.id.rightFragment);
if (rightFragment != null){
makeToast(rightFragment.getMessageFromRight());
}else {
makeToast("does not found rightFragment");
}
return inflater.inflate(R.layout.fragment_left, container, false);
}
public String getMessageFromLeft(){
return "Hi! Im left";
}
private void makeToast(String text){
Toast.makeText(getContext(),text,Toast.LENGTH_SHORT).show();
}
}
这是我的RightFragment
public class RightFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
LeftFragment leftFragment = (LeftFragment) getFragmentManager().findFragmentById(R.id.leftFragment);
if (leftFragment != null){
makeToast(leftFragment.getMessageFromLeft());
}else {
makeToast("does not found leftFragment");
}
return inflater.inflate(R.layout.fragment_right, container, false);
}
public String getMessageFromRight(){
return "Hi! Im right!";
}
private void makeToast(String text){
Toast.makeText(getContext(),text,Toast.LENGTH_SHORT).show();
}
}
答案 0 :(得分:1)
有两种方法可以在两个片段之间进行通信。如果2个片段同时加载。我通常使用以下两种方法之一来完成它。
答案 1 :(得分:0)
可能发生的事情是Left Fragment首先获得OnCreateView()调用,此时Right Fragment还没有被充气(因此它不能被发现"通过findFragmentbyId())。
我建议将获取其他片段引用的代码移动到onStart()中,并仅在onCreateView()中对片段进行膨胀。