在另一个 ViewPager 可见的片段内检测 ViewPager 中的片段
Detect Fragment in ViewPager inside a Fragment of another ViewPager visible
比如我有
MainActivity (contain a ViewPager)
Fragment0
Fragment1 (contain a ViewPager)
Fragment1a
Fragment1b
Fragment2
我想在每次看到 Fragment1a
时刷新它,所以我在 Fragment1a
中使用 setUserVisibleHint
但效果不佳。
当我在片段 Fragment1a
和 Fragment1b
之间切换时,Fragment1a
的 setUserVisibleHint
被调用
但是,当我从片段 Fragment0
到 Fragment1
或 Fragment2
到 Fragment1
setUserVisibleHint
of Fragment1a (and Fragment1b)
not called
如何检测 Fragment1a (and Fragment1b)
可见?任何帮助或建议将不胜感激。
setUserVisibleHint 也对我不起作用我使用另一种方法在查看寻呼机更改片段时更新片段中的数据,下面是方法,
viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
try {
if(viewPagerAdapter.getItem(position) instanceof Fragment1a){
Fragment1a frag1 = (Fragment1a) viewPagerAdapter.getItem(position);
frag1.updateData(data); // here is the public method of fragment which declared for udpate data in fragment
}else if(viewPagerAdapter.getItem(position) instanceof Fragment1b){
Fragment1b frag2 = (Fragment1b) viewPagerAdapter.getItem(position);
frag2.updateData(data); // here is the public method of fragment which declared for udpate data in fragment
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
viewpager.setCurrentItem(0);
这样你可以直接更新数据只需要在你的片段中创建一个public方法。
这是适配器
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<TabModel> 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, TabModel title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position).getTabName();
}
}
比如我有
MainActivity (contain a ViewPager)
Fragment0
Fragment1 (contain a ViewPager)
Fragment1a
Fragment1b
Fragment2
我想在每次看到 Fragment1a
时刷新它,所以我在 Fragment1a
中使用 setUserVisibleHint
但效果不佳。
当我在片段 Fragment1a
和 Fragment1b
之间切换时,Fragment1a
的 setUserVisibleHint
被调用
但是,当我从片段 Fragment0
到 Fragment1
或 Fragment2
到 Fragment1
setUserVisibleHint
of Fragment1a (and Fragment1b)
not called
如何检测 Fragment1a (and Fragment1b)
可见?任何帮助或建议将不胜感激。
setUserVisibleHint 也对我不起作用我使用另一种方法在查看寻呼机更改片段时更新片段中的数据,下面是方法,
viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
try {
if(viewPagerAdapter.getItem(position) instanceof Fragment1a){
Fragment1a frag1 = (Fragment1a) viewPagerAdapter.getItem(position);
frag1.updateData(data); // here is the public method of fragment which declared for udpate data in fragment
}else if(viewPagerAdapter.getItem(position) instanceof Fragment1b){
Fragment1b frag2 = (Fragment1b) viewPagerAdapter.getItem(position);
frag2.updateData(data); // here is the public method of fragment which declared for udpate data in fragment
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
viewpager.setCurrentItem(0);
这样你可以直接更新数据只需要在你的片段中创建一个public方法。
这是适配器
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<TabModel> 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, TabModel title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position).getTabName();
}
}