【问题标题】:Android ViewPager FragmentStatePagerAdapter issueAndroid ViewPager FragmentStatePagerAdapter 问题
【发布时间】:2016-04-29 09:50:17
【问题描述】:

我正在构建一个使用 Viewpager 和 FragmentStatePagerAdapter 的应用程序。 FragmentStatePagerAdapter 获取一个对象数组,稍后用于将每个对象数据映射到一个片段。

适配器将 3 个片段加载到内存中(我在页面上时调用了 3 次 onCreateView),它加载当前片段和接下来的两个片段。

我有以下问题:

我必须根据我所在的当前片段的内容变化来改变下一个片段的内容。

我尝试修改 FragmentStatePagerAdapter 中的数组,然后在适配器上调用 notifydatasetchanged,但适配器没有再次加载下一页。

最好的方法是什么?

一些代码和场景: 我所在的当前片段包含用户数据,登录的用户可以关注他或取消关注。

这是 onClick 代码:

if(mListener!=null)
                        mListener.onTweetUserFollowingStatusChanged(tweet.getUser());

来自带有视图页面的活动中侦听器的回调:

@Override
    public void onTweetUserFollowingStatusChanged(User user) {
        DataManager.getInstance().onTweetUserFollowStatusChanged(user);
        List<Tweet> affectedTweets = mPagerAdapter.getTweetsWithUser(user);
        for (Tweet affectedTweet: affectedTweets
                ) {
            boolean affectedTweetCurrentUserFollowStats = affectedTweet.isFollowingTweetUser();
            affectedTweet.setFollowingTweetUser(!affectedTweetCurrentUserFollowStats);
        }
        mPagerAdapter.notifyDataSetChanged();
    }

下一页包含相同的用户。

所以如果我在当前页面上关注他,我希望下一页的关注按钮显示“取消关注”

【问题讨论】:

  • 发布您的代码,尝试什么
  • 您可以尝试片段的 setArgument() 方法。捆绑名称=新捆绑(); name.putCharSequence("你的钥匙","你的价值"); fragment.setArguments(name);
  • 我已经在这样做以在适配器中实例化片段
  • 这就是我传递对象数据的方式

标签: android android-viewpager fragmentstatepageradapter


【解决方案1】:

我找到了解决办法;

原来的问题:

更新 FragmentStateAdapter 中的数组后,我需要一种方法来更新 Adapter 中已实例化片段的 UI。

所以我在更新 FragmentStateAdapter 中的数组后只需调用 notifyDataSetChange() 并将此代码添加到您的适配器。

  mPagerAdapter.registerDataSetObserver(new DataSetObserver() {
            @Override
            public void onChanged() {
                super.onChanged();

                FragmentStatePagerAdapter fragmentPagerAdapter = (FragmentStatePagerAdapter) VP_tweets.getAdapter();
                for(int i = 0; i < fragmentPagerAdapter.getCount(); i++) {
                    TweetFragment viewPagerFragment = (TweetFragment) VP_tweets.getAdapter().instantiateItem(VP_tweets, i);
                    if(viewPagerFragment != null && viewPagerFragment.isAdded()) {
                        viewPagerFragment.updateUI();
                    }
                }
            }

        });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多