【发布时间】:2018-12-07 13:24:27
【问题描述】:
我正在使用片段状态寻呼机适配器来处理不同片段的创建。
在我的应用程序中,开始选项卡是用户输入数据的地方,最后一个选项卡显示基于开始选项卡的报告。
问题是当我进入报告选项卡时,除了以前的选项卡信息外,所有内容都正确显示。似乎它正在创建选项卡之前它变得可见。
有什么方法可以只在报告选项卡可见时加载它?
【问题讨论】:
标签: android android-viewpager android-tabs
我正在使用片段状态寻呼机适配器来处理不同片段的创建。
在我的应用程序中,开始选项卡是用户输入数据的地方,最后一个选项卡显示基于开始选项卡的报告。
问题是当我进入报告选项卡时,除了以前的选项卡信息外,所有内容都正确显示。似乎它正在创建选项卡之前它变得可见。
有什么方法可以只在报告选项卡可见时加载它?
【问题讨论】:
标签: android android-viewpager android-tabs
我相信您可以重写 setUserVisibleHint 方法来获得有关 framgent 可见性的通知
https://developer.android.com/reference/android/support/v4/app/Fragment#setuservisiblehint
【讨论】:
OnPageChangeListener myOnPageChangeListener = new OnPageChangeListener(){
@Override public void onPageScrollStateChanged(int state) {
//Called when the scroll state changes.
}
@Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
//This method will be invoked when the current page is scrolled, //either as part of a programmatically initiated smooth scroll //or a user initiated touch scroll.
}
@Override public void onPageSelected(int position) {
//This method will be invoked when a new page becomes selected.
textMsg.append("onPageSelected:" + position + "\n"); }};
现在将此侦听器添加到您的 viewpager
viewPager.setOnPageChangeListener(myOnPageChangeListener)
【讨论】:
为了更新选项卡,我不得不通知数据集已更改为适配器,然后在视图寻呼机上重新设置。
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
if(tab.getPosition() == areas.size()){
roundPagerAdapter.notifyDataSetChanged();
viewPager.setAdapter(null);
viewPager.setAdapter(roundPagerAdapter);
viewPager.setCurrentItem(tab.getPosition());
} else {
viewPager.setCurrentItem(tab.getPosition());
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
【讨论】: