动态加载fragment配合TabLayout
来源:互联网 发布:无线访客网络设置 编辑:程序博客网 时间:2024/05/17 01:54
这种配合使用TabLayout来控制,获取position比较方便,fragment不需要一次性全部加载,而是在第一次使用的时候加载。也需要WindowManager和事务进行管理。因为没有用到ViewPager,所以没有滑动效果。比较适合做程序大分类主要框架。
一、MyFragment
/** * A simple {@link Fragment} subclass. */public class MyFragment extends Fragment { private TextView textView; public MyFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_my, container, false); initView(view); return view; } private void initView(View view) { String title= (String) getArguments().get("title"); textView= (TextView) view.findViewById(R.id.txt_title); textView.setText(title); }}
二、TabFragmentActivity
/** * 动态加载fragment,配合TabLayout */public class TabFragmentActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener { private TabLayout tabLayout; private Fragment[] fragments; private String[] titles = {"天九", "地八", "人七", "和五"}; private int position; FragmentManager fragmentManager;//获取fragment管理器 FragmentTransaction fragmentTransaction;//获取事务 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tab_fragment); initView(); } /** * 初始化 */ private void initView() { fragmentManager = getSupportFragmentManager();//获取fragment管理器 fragments = new Fragment[titles.length]; tabLayout = (TabLayout) findViewById(R.id.tab_nav); tabLayout.setOnTabSelectedListener(this);//这一句监听放在添加tab之前,才可以默认加载第一页 //添加tab for (int i = 0; i < titles.length; i++) { TabLayout.Tab tab = tabLayout.newTab(); tab.setText(titles[i]); tab.setIcon(R.mipmap.ic_launcher); tabLayout.addTab(tab, i, i == position);//这一句要先有监听才能选中fragment } } @Override public void onTabSelected(TabLayout.Tab tab) { //刚进来没有执行 Fragment fragmentFrom = fragments[position];//获取当前显示的fragment Fragment fragmentTo = (Fragment) tab.getTag(); if (fragmentTo == null) { fragmentTo = getItem(tab.getPosition()); tab.setTag(fragmentTo); } position = tab.getPosition();//给position赋新值 switchFragment(fragmentFrom, fragmentTo); } /** * 切换显示fragment * * @param fragmentFrom * @param fragmentTo */ private void switchFragment(Fragment fragmentFrom, Fragment fragmentTo) { fragmentTransaction = fragmentManager.beginTransaction();//获取事务 //隐藏from if (fragmentFrom != null) { fragmentTransaction.hide(fragmentFrom); } //先查找fragmentTo是否已经被装载 Fragment fragment = fragmentManager.findFragmentByTag(fragmentTo.getClass().getName()); //如果fragmentTo不存在就装载,存在就显示 if (fragment == null) { fragmentTransaction.add(R.id.frame_container, fragmentTo); } else { fragmentTransaction.show(fragmentTo); } fragmentTransaction.commit(); } /** * 创建fragment * * @param position * @return */ private Fragment getItem(int position) { Fragment fragment = new MyFragment(); Bundle bundle = new Bundle(); bundle.putString("title", titles[position]); fragment.setArguments(bundle); fragments[position] = fragment; return fragment; } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { }}
0 0
- 动态加载fragment配合TabLayout
- TabLayout实现动态加载Fragment
- tablayout动态添加fragment
- TabLayout简单使用以及+Fragment配合
- TabLayout加载多个Fragment
- tablayout结合动态创建fragment
- Android应用ViewPager和TabLayout动态加载Fragment,并实现view和tab动态刷新。
- TabLayout与ViewPager和Fragment、FragmentPagerAdapter的配合使用
- TabLayout-ViewPager填充Fragment和懒加载
- TabLayout+ViewPager+Fragment懒加载实现
- TabLayout+ViewPager+Fragment实现懒加载
- TabLayout+ViewPager+fragment实现懒加载
- fragment摆放tablayout网络加载数据
- Tablayout+viewpager+Fragment的数据加载问题
- TabLayout + ViewPager + Fragment 实现动态框架
- fragment配合viewpager实现懒加载
- 置顶TabLayout配合动态高度ViewPager效果实现
- fragment动态加载
- 1619-7 张良 十二月十八号总结 [连续第七十九天]
- 《React-Native系列》图解RN布局之FlexBox
- dev多控件导出到Excel多个sheet页
- Leetcode Total Hamming Distance 477
- css水平居中的方法
- 动态加载fragment配合TabLayout
- 设计模式之适配器模式
- Linux下tar用法
- HDOJ.2955 Robberies (01背包+概率问题)
- Tv Develop of Android TIF Study
- Linux下安装Nginx
- window平台安装 MongoDB
- 关于问题 mysql"Access denied for user root@localhost" 的解决办法
- JavaWeb之Jsp的初次相识