提问者:小点点

Android ViewPager FragmentStatePagerAdapter问题


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

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

我有以下问题:

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

我已经尝试修改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();
    }

下一页包含相同的用户。

因此,如果我在当前页面上跟踪他,我希望下一页的跟踪按钮显示“UNFOLLOW”


共1个答案

匿名用户

我找到了解决办法;

原始问题:

在更新 FragmentStateAdapter 中的数组后,我需要一种方法来更新适配器中已实例化的片段的 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();
                    }
                }
            }

        });