我有一个流程,用户可以在项目的组/类别中选择(第一个选项卡)并查看项目列表(在第二个选项卡中)并在第三个选项卡中执行其他操作(此处不重要)
当用户第一次选择默认组/类别(在第一个选项卡中)并且显示相应的项目列表(在第二个选项卡中)时,用户登陆应用程序
当用户选择其他组(在第一个标签页中)时,我想更改列表(在第二个标签中)。
所以主要问题是:
实现这一目标的最佳和正确方法是什么?
用户界面:使用标签滑动视图
我选择了带有标签和滑动视图的布局。每个选项卡都是FragmentPageAdapter中声明的不同片段。 ViewPager中包含的所有内容,如https://developer.android.com/training/implementing-navigation/lateral.html
中的教程中所述后端:Firebase
每个片段通过FirebaseRecyclerAdapter从Firebase数据库中获取数据作为对象列表。
1。使用其他布局?
以不同方式实现用户流,无需滑动视图
例如,它可以是一个浮动按钮,首先选择一组项目,然后在另一个活动中查看它们,但这样回到组/类别并不像滑动视图那样容易。
2。在TAB2中Dinamycally改变片段?
当用户在TAB1中选择一个组时,使用不同的DatabaseReference创建一个新的片段,并通过FragmentManager在TAB2中进行更改。
我在StackOverflow上阅读了很多关于恐怖变化的帖子 ViewPager中的片段,但我找不到真正明确的方法。 (嵌套片段?viewpager的持有者片段?...)
第3。仅更改Firebase后端参考?
我的想法是更改用于初始化FirebaseRecyclerAdapter的Firebase DatabaseReference,以便使用FragmentPageAdapter中声明的相同片段加载新的项列表。
我仍然没有找到解决方法来解决这个问题
在谈到实施之前......关于最佳方法的任何想法?
答案 0 :(得分:0)
在我看来,我会使用EventBus
或RxJava
。另一个实现是:
将第一个标签中的所选数据发送到Activity
。
从Activity
在第二个fragment
中,您可以使用onCreateView
如果您的第二个片段使用单一模式,则可以调用adapter.setList(yourList)
和adapter.notifyDataChanged()
答案 1 :(得分:0)
我找到了简单的解决方案
我使用的方法是使用ViewPager中已声明的相同片段更改Firebase适配器,它运行正常。
如果某人有相同的情况并希望以相同的方式实施,我会在我的代码下面发布。
在第一个片段(第一个标签)的FyrebaseRecyclerAdapter中,在填充视图方法中,您只需创建一个新的Firebase数据库参考,并创建一个新的适配器以在recyclerview中设置。
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String groupKey = getRef(position).getKey();
// Getting the RecyclerView used by Second Fragment (Second TAB)
RecyclerView mRecyclerView = (RecyclerView)fragmentContainer.getActivity().findViewById(R.id.second_recycler_view);
FirebaseDatabase db = FirebaseDatabase.getInstance();
DatabaseReference dbRef = db.getReference("Groups").child(groupKey)
// Set the new adapter so that fragment 2 update data
FirebaseRecyclerAdapter<Member, MemberViewHolder> mAdapter = new MyAdapter(Member.class, R.layout.member, MemberViewHolder.class, dbRef);
mRecyclerView.setAdapter(mAdapter);