我有一个包含两个片段的标签视图。这两个片段包含带卡片的回收者视图。 两个片段中的每张卡都有一个按钮。 单击片段1的按钮应将片段2打开为单独的页面,反之亦然。 我正在努力寻找一种方法来实现这一点,而不会使每一个太复杂和紧密耦合。
点击“完成”页面中的“SELECT DONOR”按钮,可以在新页面中打开供体片段,用户可以为所选受赠者分配捐赠者。
所以我在这里有两个需求
1)从片段
开始片段2)跟踪Donee新的捐赠者页面的打开情况,以便我可以为该特定受赠者分配捐赠者。
我希望这是可以理解的。
到目前为止,我已经尝试了LocalBroadcast和FragmentManager,但很难跟踪我正在使用的代码。
你们能提出更好的技术来实现这个目标吗?
答案 0 :(得分:0)
最简单的解决方案可能是,开始一项新活动,将ID,姓名等内容传递给按钮点击上的意图。
Context.startActivity(new Intent(Context, YourAssigneeActivity.class)
.putExtra("ID",id));
答案 1 :(得分:0)
因此,我假设您单击一个选项卡上的按钮时不会切换到其他选项卡。因此片段应该填满整个屏幕。
考虑到这一假设,您很可能必须切换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)
}
}
}
进入“活动”后,您可以在活动的onCreate()
中设置片段。在创建片段之前,Activity在onCreate中使用getIntent()
检索数据。然后,您可以使用setArguments(<Bundle>)
将数据放入片段中。在onCreateview()
的片段中,使用getArguments()
检索它。
我知道这有点紧张。更好的解决方案是切换到Activity并忘记Fragment。这将消除一层复杂性。
如果您直接从Fragment转到Fragment,您可以忽略Activity部分,但其余部分应该保持不变。
希望这是您正在寻找的答案!
修改:请注意,如果活动未实施mCallback = (Callback) context
,则Callback
为空