2016-04-29 104 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(); 
        } 
       } 
      } 

     });