【问题标题】:addOnPageChangeListener not working the first timeaddOnPageChangeListener 第一次不工作
【发布时间】:2018-01-21 14:05:19
【问题描述】:

我的主要活动中有一个回收视图和一个浮动操作按钮。我有两个 viewpager 片段,只有一个线性布局。在 addOnPageChangeListener 中,我添加了一个侦听器,它填充 recyclerview 并在选择 TAB 1 时在浮动操作按钮上实现 onItemClick,并且仅在选择 TAB 2 时填充 recyclerview 并隐藏 fab。 在我的两个片段中,我只是夸大了各自的布局。

当我打开活动时,recyclerview 是空的。当我选择另一个选项卡时,recyclerview 开始工作并填充另一个选项卡 TAB 2。当我现在选择 TAB 1 时,它也会按预期填充,并且 fab 上的 clickListener 也按预期工作。

但是为什么recyclerview第一次是空的。刷卡也不起作用。有什么解决办法吗?我没有在每个片段中创建 recyclerview,因为我必须使用 fab 按钮对其进行更新。我的 fab 按钮在 mainActivity 中。我不想只将 fab 按钮放在第一个片段中,因为这意味着在滑动片段时默认的 fab 动画将消失。

http://pastebin.com/rrumZyf4

【问题讨论】:

  • 代码很长。请建议一种通用技术,以在打开活动时显示回收者视图。
  • 你是在 onCreate() 方法中初始化你的代码吗??
  • 如果不完整,添加相关部分代码
  • 添加了代码的相关部分。 addOnPageChangeListener 在 onCreate()

标签: android android-layout android-fragments android-viewpager android-tablayout


【解决方案1】:

加入派对有点晚了,但你可以做这样的事情..

mPager.addOnPageChangeListener(new OnPageChangeListener() {

            boolean first = true;

            @Override
            public void onPageScrolled(final int position, final float positionOffset,
                    final int positionOffsetPixels) {
                if (first && positionOffset == 0 && positionOffsetPixels == 0){
                    onPageSelected(0);
                    first = false;
                }
            }

            @Override
            public void onPageSelected(final int position) {
                setItem(item.get(position));
            }

            @Override
            public void onPageScrollStateChanged(final int state) {

            }
        });

在 onPageScrolled 方法中,您可以检查它是否是第一项并相应地设置页面。希望这能解决您的问题。

【讨论】:

    【解决方案2】:

    似乎您仅在 onPageSelected 方法内从服务器加载数据。这不会在viewpager 第一次加载时触发。仅当页面更改时。 您必须在此方法之外进行初始数据加载。

    【讨论】:

    • 是的,你明白了。是的,我可以在方法之外加载数据,但还有其他更好的选择,因为这意味着重复大量代码。标签滑动不起作用的原因是什么?
    • 把它作为一个单独的方法。在需要的地方调用它。
    • 每次选项卡更改时从服务器重新加载数据是一个不好的选择。
    • 是的,我同意。那么,最好的选择是对两个片段分别进行回收者视图吗?但是然后我将如何在 fab 上实现 onClickListener,因为它在 mainActivity 中锚定到 viewpager,并且我必须在单击 fab 采取的操作之后将元素添加到第一个 TAB 中的回收器。我是否也应该在第一个 TAB 的片段中实现 fab。这是一个好习惯吗?
    • 如果您需要为每个标签显示不同的列表内容,那么最好在每个片段中包含recyclerview。要更改片段内的列表项,请检查此Deliver a Message to a Fragment
    猜你喜欢
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 2012-05-16
    • 2013-03-22
    相关资源
    最近更新 更多