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