如何在viewpager中更改片段内容

时间:2016-08-30 16:00:29

标签: android android-fragments android-viewpager firebase-realtime-database

我想要实现的目标:

我有一个流程,用户可以在项目的组/类别中选择(第一个选项卡)并查看项目列表(在第二个选项卡中)并在第三个选项卡中执行其他操作(此处不重要)

当用户第一次选择默认组/类别(在第一个选项卡中)并且显示相应的项目列表(在第二个选项卡中)时,用户登陆应用程序

enter image description here

当用户选择其他组(在第一个标签页中)时,我想更改列表(在第二个标签中)。

所以主要问题是:

实现这一目标的最佳和正确方法是什么?

我目前的实施:

用户界面:使用标签滑动视图

我选择了带有标签和滑动视图的布局。每个选项卡都是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中声明的相同片段加载新的项列表。

我仍然没有找到解决方法来解决这个问题

在谈到实施之前......关于最佳方法的任何想法?

2 个答案:

答案 0 :(得分:0)

在我看来,我会使用EventBusRxJava。另一个实现是:

STEP1:

将第一个标签中的所选数据发送到Activity

STEP2:

Activity

向第二个标签发送数据

STEP3:

在第二个fragment中,您可以使用onCreateView

中数据库中的加载数据

STEP4:

如果您的第二个片段使用单一模式,则可以调用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);