您需要将数据从 Fragment X 传递到 FragmentActivity,FragmentActivity 会将这些数据传递到 Fragment Y。您可以通过在 Fragment 类中定义的接口来执行此操作,并实例化在 onAttach() 中定义的回调。
有关如何在此处执行此操作的更多信息
与其他片段的通信
快速示例,考虑片段 A 和片段 B。片段 A 是一个列表片段,无论何时选择一个项目,它都会改变片段 B 中显示的内容。很简单,对吧?
首先,这样定义片段 A。
public class FragmentA extends ListFragment{
//onCreateView blah blah blah
}
这是片段 B
public class FragmentB extends Fragment{
//onCreateView blah blah blah
}
这是我的 FragmentActivity 将管理它们
public class MainActivity extends FragmentActivity{
//onCreate
//set up your fragments
}
大概您已经有了类似的东西,现在这里是您将如何更改 FragmentA(我们需要从中获取一些数据的列表片段)。
public class FragmentA extends ListFragment implements onListItemSelectedListener, onItemClickListener{
OnListItemSelectedListener mListener;
//onCreateView blah blah blah
// Container Activity must implement this interface
public interface OnListItemSelectedListener {
public void onListItemSelected(int position);
}
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
mListener = (OnListItemSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnListItemSelectedListener");
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
//Here's where you would get the position of the item selected in the list, and pass that position(and whatever other data you need to) up to the activity
//by way of the interface you defined in onAttach
mListener.onListItemSelected(position);
}
这里最重要的考虑是你的父Activity实现了这个接口,否则你会得到一个异常。如果成功实施,每次选择列表片段中的项目时,都会通知您的 Activity 其位置。显然你可以用任意数量或类型的参数来改变你的接口,在这个例子中我们只是传入我们的整数位置。希望这能澄清一点,祝你好运。