创建新项目,选择Tabbed Activity

默认就有2个Fragment,这里我们删除相关代码。

在切换时
FragmentPagerAdapter
onDestroyView
onCreateView Fragment没有被销毁 FragmentStatePagerAdapter
onDestroyView
onDestroy
onCreate
onCreateView Fragment被销毁 建议ViewPager对象使用setOffscreenPageLimit方法

FragmentPagerAdapter和FragmentStatePagerAdapter的区别

 创建新的Fragment并且修改代码

New ->Fragment->blank Fragment

FragmentPagerAdapter子类中的getItem修改如下

        Fragment fragment = null;
switch (position) {
case 0:
fragment=new HomeFragment();
break;
case 1:
fragment=new AboutFragment();
break;
}
return fragment;

 Activity中调用Fragment对象

创建

在FragmentPagerAdapter 的instantiateItem的时候添加Fragment,

在destroyItem的时候删除Fragment。

全部代码

public class MainActivity extends AppCompatActivity {

    public SparseArray<Fragment> fragments = new SparseArray<>();
private static final int[] TAB_TITLES = new int[]{R.string.tab_text_1, R.string.tab_text_2};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewPager viewPager = findViewById(R.id.view_pager);
viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager(),FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
@NonNull
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
switch (position) {
case 0:
fragment=new HomeFragment();
break;
case 1:
fragment=new AboutFragment();
break;
}
return fragment;
} @Override
public int getCount() {
return TAB_TITLES.length;
} @Nullable
@Override
public CharSequence getPageTitle(int position) {
return getResources().getString(TAB_TITLES[position]);
} @NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
Fragment fragment= (Fragment)super.instantiateItem(container, position);
fragments.put(position,fragment);
return fragment;
} @Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
fragments.remove(position);
super.destroyItem(container, position, object);
}
});
TabLayout tabs = findViewById(R.id.tabs);
tabs.setupWithViewPager(viewPager); }
}

Fragment调用Activity中的方法

方法1:使用getActivity,转成MainActivity,在调方法

方法2;在Fragment中创建Listener 接口,对象指针,设置对象的方法

    public static interface onSpecialListener{
void onSL(String msg);
}
private onSpecialListener mListener; public void setmListener(onSpecialListener listener) {
mListener=listener;
}

在Activity中设置Fragment的该接口对象

                        fragment=new HomeFragment();
HomeFragment homeFragment=(HomeFragment)fragment;
homeFragment.setmListener(new HomeFragment.onSpecialListener() {
@Override
public void onSL(String msg) {
ShowMsg(msg);
}
});

在Fragment中有需求的时候调用该接口,

        Button btnHome = v.findViewById(R.id.btnHome);
btnHome.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mListener != null) {
mListener.onSL("From HomeFragment to MainAct");
}
}
});
return v;

最新文章

  1. &#39;++&#39; needs l-value
  2. Ubuntu 12.04 安装MySQL
  3. 【转】浅析Sql Server参数化查询
  4. 平行四边形面积 light 1305
  5. spring 中事务的PROPAGATION_REQUIRED,Readonly的解释
  6. CS程序,服务器端弹出MessageBox.Show()之类的UI操作???禁止
  7. 【CSS3】---练习制作导航菜单
  8. C# - 类型
  9. js 去重 字符串 [123123,123123,345435,33467,45645,343467,879,45645]
  10. 提高Java代码质量的Eclipse插件之Checkstyle的使用详解
  11. 从a标签传值中文乱码解决
  12. iOS libyuv
  13. 【学习总结】GirlsInAI ML-diary day-9-dict字典
  14. WEB前端基础知识点
  15. sql server把一个库表的某个字段更新到另一张表的相同字段
  16. fescar分布式事务(概览)
  17. MySQL5.7单实例二进制包安装方法
  18. 2017 Russian Code Cup (RCC 17), Final Round
  19. OnlineJudgeFE之前端二次开发
  20. Web安全 概述

热门文章

  1. 17、生命周期-BeanPostProcessor在Spring底层的使用
  2. JQuery 实践--扩展JQuery
  3. PostMan的详细介绍
  4. windows游戏编程键盘
  5. Linux 修改文件夹的用户组权限
  6. docker 安装redis 注意事项
  7. ACM之路(12)—— KMP &amp; 扩展KMP &amp; Manacher
  8. CF1200A
  9. Shiro RememberMe 1.2.4远程代码执行漏洞-详细分析
  10. 设顺序表中的数据元素递增有序,试着写一算法,将x插入到顺序表上的适当位置上,以保持该表的有序性。