如何从另一个片段中的RecyclerView适配器启动片段?

时间:2017-06-17 17:57:30

标签: android android-fragments android-recyclerview adapter

我有一个包含两个片段的标签视图。这两个片段包含带卡片的回收者视图。 两个片段中的每张卡都有一个按钮。 单击片段1的按钮应将片段2打开为单独的页面,反之亦然。 我正在努力寻找一种方法来实现这一点,而不会使每一个太复杂和紧密耦合。

这是具有自己的适配器的片段1。 enter image description here

这是片段二: enter image description here

点击“完成”页面中的“SELECT DONOR”按钮,可以在新页面中打开供体片段,用户可以为所选受赠者分配捐赠者。

所以我在这里有两个需求

1)从片段

开始片段

2)跟踪Donee新的捐赠者页面的打开情况,以便我可以为该特定受赠者分配捐赠者。

我希望这是可以理解的。

到目前为止,我已经尝试了LocalBroadcast和FragmentManager,但很难跟踪我正在使用的代码。

你们能提出更好的技术来实现这个目标吗?

2 个答案:

答案 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()时,请不要忘记您需要在这些对象中实施Parcelableexplained 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为空