使用 tabLayout 和 ViewPager 未在 Fragment 中调用 OnResume()
OnResume() not called in Fragment using tabLayout and ViewPager
我正在使用 tabLayout
开发应用程序。
我有一个问题:当我尝试重新激活 Fragment
时,未调用方法 OnResume
。
这是我的 activity:
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
片段(最后一个片段)重新激活 TAB1
片段时,会调用 OnResume
方法。但是,例如,
当我尝试从第二个选项卡重新激活第一个选项卡时,从未调用过。
我已经解决了这个问题。
我使用 setUserVisibleHint(boolean isVisibileToUser) 而不是 onResume()。像这样:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser) {
init();
} else {
}
}
谢谢大家!
已接受的答案对我不起作用。但是,我找到了解决问题的方法。
只需使用以下构造函数初始化您的 FragmentStatePagerAdapter:
public MyPagerAdapter(FragmentManager fm, int behaviour) {
super(fm, behaviour);
}
像这样:
MyPagerAdapter myPagerAdapter = new MyPagerAdapter(getChildFragmentManager(), FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
我正在使用 tabLayout
开发应用程序。
我有一个问题:当我尝试重新激活 Fragment
时,未调用方法 OnResume
。
这是我的 activity:
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
片段(最后一个片段)重新激活 TAB1
片段时,会调用 OnResume
方法。但是,例如,
当我尝试从第二个选项卡重新激活第一个选项卡时,从未调用过。
我已经解决了这个问题。 我使用 setUserVisibleHint(boolean isVisibileToUser) 而不是 onResume()。像这样:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser) {
init();
} else {
}
}
谢谢大家!
已接受的答案对我不起作用。但是,我找到了解决问题的方法。
只需使用以下构造函数初始化您的 FragmentStatePagerAdapter:
public MyPagerAdapter(FragmentManager fm, int behaviour) {
super(fm, behaviour);
}
像这样:
MyPagerAdapter myPagerAdapter = new MyPagerAdapter(getChildFragmentManager(), FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);