所以我假设您在单击一个选项卡上的按钮时不会切换到另一个选项卡。因此片段应该填满整个屏幕。
考虑到这个假设,您很可能必须切换Activity。这可以通过Intent 轻松完成:
Intent intent = new Intent(getActivity(), ActivityB.class)
intent.putExtra("KEY", <your required data to transfer>);
getActivity().startActivityForResult(intent);
请注意,当您使用putExtra() 时,不要忘记您需要在这些对象中实现Parcelable (explained here)
要了解点击了哪个项目,您可以使用以下模式(伪代码 - 我个人认为它非常干净):
FragmentA implements YourAdapter.callback {
onItemClicked(<YourObject> item) {
<starting new activity as described above>
}
}
class YourAdapter extends RecyclerView.Adapter {
Callback mCallback;
YourAdapter(Context context, otherStuff) {
mCallback = (Callback) context;
}
interface Callback {
onItemClicked(<YourObject> item)
}
YourViewHolder implements View.OnClickListener {
onClick(View v) {
mCallback.onItemClicked(<YourObject> item)
}
}
}
进入 Activity 后,您可以在 Activity 的 onCreate() 中设置 Fragment。在创建 Fragment 之前,在 Activity 中使用 onCreate 中的getIntent() 检索数据。然后您可以将您的数据放入带有setArguments(<Bundle>) 的片段中。在 onCreateview() 的 Fragment 中使用 getArguments() 检索它。
我知道这有点复杂。更好的解决方案是只切换到 Activity 并忘记 Fragment。这将消除一层复杂性。
如果您直接从 Fragment 转到 Fragment,则可以忽略 Activity 部分,但其余部分应保持不变。
希望这是您正在寻找的答案!
编辑:请注意,如果 Activity 未实现 Callback,则 mCallback = (Callback) context 为 null