2017-06-17 136 views
-1

我有一个标签视图与两个片段。这两个片段包含卡片的回收者视图。 两个片段中的每张卡都有一个按钮。 点击片段1的按钮应该将片段2作为单独的页面打开,反之亦然。 我苦苦寻找实现这一点没有尽一切过于复杂,紧密耦合的方法。如何从另一个片段内的RecyclerView适配器启动一个片段?

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

这是片段二: enter image description here

点击在受赠者页面,选择供体按钮应该在一个新的页面,用户将能够分配一个供体的选择受赠人开的供体片段。

所以我有两个需要在这里

1)从一个片段

2)启动一个片段来跟踪从受赠人的新的捐助页面被打开了,这样我可以指定为供体具体受托人。

我希望这是可以理解的。

到目前为止,我已经试过LocalBroadcast和FragmentManager但它很难跟踪的什么我的代码做。

你们能否提供一个更好的方法来实现这一目标?

+0

,使这个更复杂的事情是,我必须写回收视图的适配器内的所有代码。任何其他解决此问题的方法。没有将所有代码填充到适配器中? – JavaBanana

回答

0


最简单的解决方案可能会,开始一个新的活动,通过类似的ID,名称或某事的意图上的按钮点击。

Context.startActivity(new Intent(Context, YourAssigneeActivity.class) 
          .putExtra("ID",id)); 
0

因此我假设您在单击一个选项卡上的按钮时不会切换到另一个选项卡。因此片段应该填满整个屏幕。

在这个假设在你心中最有可能切换Activity。这可以是多内斯容易的IntentIntent intent = new Intent(getActivity(), ActivityB.class) intent.putExtra("KEY", <your required data to transfer>); getActivity().startActivityForResult(intent);

注意,当您使用putExtra()不要忘记,你需要实现这些对象(explained here

Parcelable要了解哪些项目被点击了你可以用下面的方式(伪 - 我个人认为这是非常干净):

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()设定的片段。在活动中,在创建片段之前,使用onCreate中的getIntent()检索数据。然后你可以将你的数据放在setArguments(<Bundle>)的片段中。在onCreateview()的片段中检索它与。

我知道这是一种conmplicated。一个更好的解决方案是只切换到一个活动并忘记Fragment。这会消除一层复杂性。

如果您直接从片段到片段,您可以忽略活动部分,但其余应保持不变。

希望这是你正在寻找的答案!

编辑:请注意,mCallback = (Callback) context为null,如果该活动没有实施Callback

相关问题