我有一项活动由三个片段组成。这些片段使用使用 PagerAdapter 的操作栏选项卡。我想要做的是从主活动访问活动选项卡式片段中的方法。我已经尝试了下面的代码,但这只是将片段返回为空,所以我猜它无法在选项卡中找到它!
NPListFragment articleFrag = (NPListFragment) getSupportFragmentManager().findFragmentByTag("NP");
articleFrag.refreshT();
寻呼机适配器:
public class AppSectionsPagerAdapter extends FragmentPagerAdapter {
public AppSectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
return new NPListFragment();
case 1:
return new PListFragment();
case 2:
return new FavouritesFragment();
}
return null;
}
@Override
public int getCount() {
return 3;
}
}
有人可以建议吗?我在这个问题上花了大约 6 个小时,但在解决这个问题上没有取得任何进展。
您应该做的是:每个片段仅创建一次,然后为所有对 getItem 方法的调用提供它。
例如 :
public class AppSectionsPagerAdapter extends FragmentPagerAdapter {
Fragment one, two, three;
public AppSectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
if(one == null)
one = new NPListFragment();
return one;
case 1:
if(two == null)
two= new PListFragment();
return two;
case 2:
if(three == null)
three= new FavouritesFragment();
return three;
}
return null;
}
@Override
public int getCount() {
return 3;
}
}
现在,即使您在活动中也可以致电getItem
如果您想调用特定方法,您只需将其转换为真正的片段类即可。
int pos = viewpager.getCurrentItem();
Fragment activeFragment = adapter.getItem(pos);
if(pos == 0)
((NPListFragment)activeFragment).refreshT();
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)