2016-04-29 26 views
0

Ich baue eine App, die einen Viewpager mit einem FragmentStatePagerAdapter verwendet. Der FragmentStatePagerAdapter ruft ein Array von Objekten ab, das später verwendet wird, um die Objektdaten einem Fragment zuzuordnen.Android ViewPager FragmentStatePagerAdapter Problem

Der Adapter lädt 3 Fragmente in den Speicher (OnCreateView wird 3 Mal aufgerufen, wenn ich auf einer Seite bin), lädt das aktuelle Fragment und die nächsten beiden.

Ich habe folgendes Problem:.

ich den Inhalt des nächsten Fragments basierend auf Inhaltsänderung im aktuellen Fragmente in Ich bin ändern muss

Ich habe versucht, das Array in dem zu ändern FragmentStatePagerAdapter und rufen Sie dann notifydatasetchanged auf dem Adapter auf, aber der Adapter lädt die nächste Seite nicht erneut.

Was ist der beste Weg, um dies zu entfernen?

Code und Szenario: Das aktuelle Fragment, das ich bin, enthält Benutzerdaten, der angemeldete Benutzer kann ihm folgen oder nicht mehr folgen.

hier ist der onClick Code:

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

der Rückruf von Hörer in der Aktivität mit der 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(); 
    } 

Auf der nächsten Seite definiert zusätzliche denselben Benutzer.

Also, wenn ich ihn auf der curent Seite folge ich die Folge Taste auf der nächsten Seite angezeigt werden soll „unfollow“

+0

Post Ihren Code, was Sie versuchen –

+0

Sie können SetArgument() -Methode für das Fragment versuchen. Bundle Name = neues Bundle(); name.putCharSequence ("IHR SCHLÜSSEL", "IHR WERT"); fragment.setArguments (Name); –

+0

Ich mache dies bereits für die Instanziierung von Fragmenten im Adapter – Heixss

Antwort

0

ich die Lösung gefunden zu haben;

Original-Problem:

nach der Anordnung in den FragmentStateAdapter Aktualisierung brauchte ich einen Weg, um die Benutzeroberfläche der bereits instanziiert Fragmente im Adapter zu aktualisieren.

Also ich nach dem Aktualisieren des Arrays in der FragmentStateAdapter nur NotifyDataSetChange() aufrufen und diesen Code zu Ihrem Adapter hinzufügen.

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

     }); 
Verwandte Themen