android - TabView 中 Fragment 的 OnCreateView 中的 LoadData() 调用两次
问题描述
一旦我的应用程序登录,我就会开始ActivityTwo
。在 ActivityTwo 中,我立即调用TabView
Fragment
其中包含我的三个选项卡。这是 ActivityTwo 中调用 TabView 片段的代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two);
fm = getSupportFragmentManager();
final Bundle bundle = new Bundle();
bundle.putInt("TARGET_FRAGMENT_ID", fragId);
ChooseTab chooseTab = new ChooseTab();
chooseTab.setArguments(bundle);
ft = fm.beginTransaction();
ft.replace(R.id.frame, chooseTab, add);
ft.commit();
});
这是 ChooseTab Fragment 的代码,它负责设置 TabView
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.choose_tab, container, false);
//-----------------------------------------------------------------------------------
int position=getArguments().getInt("TARGET_FRAGMENT_ID");
tabLayout = (TabLayout) v.findViewById(R.id.simpleTabLayout);
tabLayout.addTab(tabLayout.newTab().setText("Tab1"));
tabLayout.addTab(tabLayout.newTab().setText("Tab2"));
tabLayout.addTab(tabLayout.newTab().setText("Tab3"));
viewPager = (ViewPager) v.findViewById(R.id.simpleViewPager);
viewPager.setOffscreenPageLimit(3);
final PagerAdapter adapter = new PagerAdapter(getActivity().getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
viewPager.setCurrentItem(position);
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
adapter.notifyDataSetChanged();
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
adapter.notifyDataSetChanged();
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
adapter.notifyDataSetChanged();
}
});
return v;
}
这是 PagerAdapter 的代码
public class PagerAdapter extends FragmentStatePagerAdapter {
private 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 Tab1();
case 1:
return new Tab2();
case 2:
return new Tab3();
default:
return null;
}
}
@Override
public int getCount() {
return mNumOfTabs;
}
}
这是代码Tab1
onCreateView
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.current_status, container, false);
fm = getFragmentManager();
LoadData();
});
return v;
}
但是当我运行应用程序并在调用 LoadData() 时打印一些日志时,会看到调用了 loadData。如何解决这个问题?
解决方案
推荐阅读
- c# - 在多用户 Windows 虚拟机上的 WinForm 应用程序上使用 Ballon 提示
- hashmap - 为什么一个对象不能有一个与之关联的数组位置而不是使用哈希图?
- c++ - 在 C++ 中出现奇怪的“未解析的外部符号”错误
- amazon-web-services - 使用 AWS_IAM 授权方法和自定义域连接到 AWS API Gateway WebSockets API
- ios - PageTabViewStyle 从右到左
- html - 半透明元素总是出现在 Chrome 的顶部
- javascript - 为什么我的背景视频没有改变?
- angular - 如何使用primeng表在Angular中选择多行?
- email - 如何向 Gmail 发送“已读”消息?
- java - 如何在 Android 上同时启用前置和后置摄像头