2015-10-26 11 views
5

Ho un ViewPager e devo sostituire il primo Fragment se si verifica una determinata azione.Sostituisci frammento corrente in ViewPager su Android

public static class PagerAdapter extends FragmentStatePagerAdapter{ 

    private TempChannel latestChannel; 
    private VideosFragment.SortType sortType; 

    public PagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position){ 
      case 0: 
       if(latestChannel == null) { 
        return new LatestVideosFragment(); 
       }else{ 
        return VideosFragment.getVideosFragment(latestChannel, sortType); 
       } 
      case 1: 
       return new LiveVideosFragment(); 
      case 2: 
       return new ConversationsFragment(); 
     } 
     return null; 
    } 
} 

Fondamentalmente, quando fa clic su un canale nel LatestVideosFragment, la prima posizione nella adattatore deve cambiare a un'istanza della classe VideosFragment.

public void startLatestChannelFragment(TempChannel channel, VideosFragment.SortType sortType){ 
    adapter.setLatestChannel(channel, sortType); 
    adapter.notifyDataSetChanged(); 
    Log.d("x", "on channel started"); 
} 

ho pensato che chiamando notifyDataSetChanged() sull'adattatore avrebbe aggiornare il frammento, ma non è così. Ho anche provato a chiamare invalidate() su ViewPager senza alcun effetto. Lo Fragment viene aggiornato solo se si passa alla terza scheda e si ritorna al primo.

risposta

4

Controllare le risposte qui per alcune buone soluzioni: ViewPager PagerAdapter not updating the View

Fondamentalmente sovrascrivere getItemPosition nel vostro PagerAdapter vi darà l'effetto desiderato.

public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 
+0

Grazie! Non immaginavo sarebbe stato così facile da ignorare un metodo – kimv

Problemi correlati