2016-04-29 46 views
0

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

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

我有以下问题:

我必须改变一个片段的基于当前片段我在内容的改动内容

我试图修改的数组FragmentStatePagerAdapter,然后调用适配器上的notifydatasetchanged,但适配器不会再次加载下一页。

什么是最好的方法来解决这个问题?

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

这里是的onClick代码:

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

的听众从与的ViewPage活动回调:

@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(); 
    } 

下一个页面containes同一用户。

所以,如果我跟着他走了短路电流页我想从下一页的后续按钮显示“取消关注”

+0

发布您的代码,您的尝试 –

+0

您可以尝试片段的setArgument()方法。 Bundle name = new Bundle(); name.putCharSequence(“Your KEY”,“Your Value”); fragment.setArguments(name); –

+0

我已经这样做了在适配器中实例化片段 – Heixss

回答

0

我已经找到了解决方案;

原始问题:

在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(); 
        } 
       } 
      } 

     }); 
相关问题