2015-10-26 22 views
5

私はViewPagerです。特定のアクションが発生した場合は、最初にFragmentを置き換える必要があります。AndroidのViewPagerで現在のフラグメントを置き換えます。

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

私はLatestVideosFragmentでチャンネルをクリックすると、基本的に、アダプタの最初の位置は、VideosFragmentクラスのインスタンスに変更する必要があります。

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

私は、アダプタにnotifyDataSetChanged()を呼び出すと、フラグメントを更新すると仮定ですが、それはできません。また、ViewPagerinvalidate(に電話してみても問題ありません。 Fragmentは、3番目のタブに移動して最初のタブに戻る場合にのみ更新されます。

答えて

4

は、いくつかの良い解決策はこちらの回答を確認してください:ViewPager PagerAdapter not updating the View

を基本的にはあなたのPagerAdaptergetItemPositionを上書きすることはあなたに所望の効果が得られます。

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

ありがとうございます!メソッドをオーバーライドするのは簡単すぎるとは想像できませんでした – kimv

関連する問題