2016-01-05 69 views
3
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_dictionary); 

    getWindow().setSoftInputMode(
      WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    viewPager = (ViewPager) findViewById(R.id.viewpager); 
    setupViewPager(viewPager); 

    tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(viewPager); 

    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
    setupNavMenu(); 
} 

private void setupViewPager(ViewPager viewPager) { 
    adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
    adapter.addFragment(new A(), "A"); 
    adapter.addFragment(new B(), "B"); 
    adapter.addFragment(new C(), "C"); 
    adapter.addFragment(new D(), "D"); 
    viewPager.setAdapter(adapter); 
} 

class ViewPagerAdapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

    public ViewPagerAdapter(FragmentManager manager) { 
     super(manager); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mFragmentList.size(); 
    } 

    public void addFragment(Fragment fragment, String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitleList.get(position); 
    } 
} 

的问题是: 当我开始活动,我得到的第一个片段的视图(A),但接下来的片段(B)的负载不看,所以当我滑动到下一个视图(B),我得到的视图,我已经加载在前一个片段,所以现在它的负载片段C ...FragmentPagerAdapter总是加载下一个片段,而不是当前

问题是,片段B的内容取决于输入片段A(保存的数据是sharedpreferences),所以我让永诺在B片段的默认值,因为它是在片段A.加载

的错误工作的SA我的方式,当我在片段D中,所以当我向左滑动到片段C时,它将显示片段C并且也加载片段B.

+0

这不是下面的答案中的错误。检查。 –

+0

当您从第一个片段输入数据时,再次替换您的片段 –

回答

1

它不是一个bug,它是viewpager的默认功能。对于每第n页(n-1)和第(n + 1)页,页面自动加载第n页。我不认为有任何直接的方式来实现你想要的。

0

最好的方法是使用自定义的onSwipeListener代替ViewPager并加载自己的片段..

但ViewPager你可以使用一个黑客:

在碎片中的数据保存后,

viewPager.setAdapter(adapter); 

这将重新加载所有片段。

不要忘记先保存当前的寻呼机位置。 复位后,设置寻呼机的位置,这样你就不会每次都回到第一个位置。 不好的编码,但它应该工作。您的ViewPagerAdapter上的

0

。覆盖方法:getItemPositionreturn POSITION_NONE

相关问题