3

我正在開發一個使用tabLayout的應用程序。OnResume()不使用tabLayout和ViewPager在片段中調用

我遇到了問題:當我嘗試重新激活片段時,OnResume方法未被調用。

這是我的活動:

private void init() { 
    fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Nuovo Ticket", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 


    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 

    final ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
    final PagerAdapter adapter = new PagerAdapter 
      (getSupportFragmentManager(), tabLayout.getTabCount()); 
    viewPager.setAdapter(adapter); 

    tabLayout.setupWithViewPager(viewPager); 
} 

我使用這樣的FragmentStatePagerAdapter:

public class PagerAdapter extends FragmentStatePagerAdapter { 
int mNumOfTabs; 

public PagerAdapter(FragmentManager fm, int NumOfTabs) { 
    super(fm); 
    this.mNumOfTabs = NumOfTabs; 
} 

@Override 
public Fragment getItem(int position) { 

    switch (position) { 
     case 0: 
      return new LavorazioneFragment(); 
     case 1: 
      return new PendingFragment(); 
     case 2: 
      return new StoriciFragment(); 
     default: 
      return null; 
    } 
} 

@Override 
public int getCount() { 
    return mNumOfTabs; 
} 

}

當我重新從TAB3 Fragmen的TAB1片段(最後一個), OnResume方法被調用。但是,例如,當我嘗試從第二個重新激活第一個選項卡時,從未調用過。

+0

有沒有原因你不使用'setupWithViewPager()'? –

+0

@Daniel Nugent沒理由!我如何使用它? – Anto

+1

https://guides.codepath.com/android/google-play-style-tabs-using-tablayout –

回答

12

我已經解決了這個問題。 我使用setUserVisibleHint(布爾isVisibileToUser),而不是onResume()。像這樣:

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if(isVisibleToUser) { 
     init(); 
    } else { 

    } 
} 

謝謝大家!

+0

作爲一個說明,我相信有一點很重要,那就是在返回或從活動切換時不會被調用。當設備從休眠或休眠模式喚醒時,它也不會被調用。只有當用戶通過在片段之間滑動或手動按下選項卡之間切換標籤時纔會調用此選項。所以不要忘記在你的onResume和onPause方法中包含邏輯。 – ChallengeAccepted

0

我認爲viewpager預渲染了屏幕(默認大小爲eatch一邊),所以當你啓動它時,它將在3個片段中執行,並在所有的生命週期中執行。

所以,如果你是第一個,第二個是已經做好準備,你不會去的onResume,但如果你跳了3頁,送出開始的大小,它會在所有階段着呢,包括的onResume

viewPager.setOffscreenPageLimit((int)size); 

http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit%28int%29

你在viewpager創建監聽知道巫屏幕用戶和模擬的onResume

viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 

這樣的東西

相關問題