2016-01-05 106 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

相關問題