Activity嵌套fragment大全,activity加载单个fragment,TabLayout+ViewPager实现多个fragment滑动效果

加载单个fragment效果                                                                        头部标题多个fragment

                 

 底部标题按钮多个fragment                                                               底部标题按钮多个fragment

FragmentPagerAdapter实现,会重复onCreateView          FragmentManager实现。不会重复onCreateView

itemview按钮,viewpager加载fragment                                            固定按钮,FrameLayout加载fragment

                   

 

 实现方法:

1、加载单个fragment

framelayout加载fragment

1、activity的layout文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"android:layout_height="match_parent"><FrameLayoutandroid:id="@+id/onef"android:layout_width="match_parent"android:layout_height="match_parent"></FrameLayout></android.support.constraint.ConstraintLayout>/3

2、创建fragment

public class Fragment1 extends Fragment {public static Fragment1 getInstance(Bundle bundle) {Fragment1 fg = new Fragment1();fg.setArguments(bundle);return fg;}protected View contentView;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {contentView = inflater.inflate(R.layout.fragment1, container, false);initViews();return contentView;}public void initViews(){TextView textView =(TextView)contentView.findViewById(R.id.f1te);textView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Toast.makeText(getContext(),"ssssf1",Toast.LENGTH_SHORT).show();}});}}

3、加载fragment

public void switchContent() {//必需继承FragmentActivity,嵌套fragment只需要这行代码getSupportFragmentManager().beginTransaction().replace(R.id.onef, new Fragment2()).commitAllowingStateLoss();
}

同一布局,显示不同fragment内容

private GridDemoFragment f_a;
private ListDemoFragment f_b;
private Fragment[] mFragments;
private int mIndex;
//方法一,默认第一fragment
private void initFragment() {f_a = new GridDemoFragment();f_b = new ListDemoFragment();//添加到数组mFragments = new Fragment[]{f_a, f_b};//开启事务FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction ft = fragmentManager.beginTransaction();//添加首页ft.add(R.id.content, f_a).commit();//默认设置为第0个setIndexSelected(0);
}
//方法一,选中显示与隐藏
private void setIndexSelected(int index) {if (mIndex == index) {return;}FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction ft = fragmentManager.beginTransaction();//隐藏ft.hide(mFragments[mIndex]);//判断是否添加if (!mFragments[index].isAdded()) {ft.add(R.id.content, mFragments[index]).show(mFragments[index]);} else {ft.show(mFragments[index]);}ft.commit();//再次赋值mIndex = index;}

 

//方法二,选中替换
private void setIndexSelectedTwo(int index) {switch (index) {case 0:changeFragment(new GridDemoFragment().getFragmentGridDemoFragment());break;case 1:changeFragment(new ListDemoFragment().getFragmentListDemoFragment());break;default:break;}
}方法二,默认第一fragment
private void changeFragment(Fragment fm) {FragmentManager supportFragmentManager = getSupportFragmentManager();FragmentTransaction transaction = supportFragmentManager.beginTransaction();transaction.replace(R.id.content, fm);transaction.commit();
}

 

// 单例(方法二)
private static GridDemoFragment fa;
public static GridDemoFragment getFragmentGridDemoFragment() {if (fa == null) {fa = new GridDemoFragment();}return fa;
}

2、FragmentManager实现framelayout加载多个fragment

private Fragment mCurrentFragment;
private FragmentManager fragmentManager;
private SparseArray<Fragment> mainFragments;

 

mainFragments = new SparseArray<>();
fragmentManager = getSupportFragmentManager();
switchFragment(R.id.rl_home);
public void switchFragment(int resId) {Fragment fg;if (mainFragments.indexOfKey(resId) > -1) {fg = mainFragments.get(resId);} else {switch (resId) {case R.id.rl_home:mainFragments.put(resId, Fragment1.getInstance(null));break;case R.id.rl_lishi:mainFragments.put(resId, Fragment2.getInstance(null));break;case R.id.rl_me:mainFragments.put(resId, Fragment3.getInstance(null));break;}fg = mainFragments.get(resId);}switchContent(fg);
}/*** 切换数据*/
private void switchContent(Fragment fg) {if (fg == null || mCurrentFragment == fg)return;if (mCurrentFragment != null && mCurrentFragment != fg)getSupportFragmentManager().beginTransaction().hide(mCurrentFragment).commitAllowingStateLoss();mCurrentFragment = fg;
、、、、、、、、、、
}

3、FragmentPagerAdapter实现viewpager加载多个fragment

public class MyFragmentAdapter extends FragmentPagerAdapter {private List<Fragment> fragmentList;private List<String> titleList;private Context context;public MyFragmentAdapter(FragmentManager fragmentManager, List<Fragment> fragmentList, List<String> titleList,Context context) {super(fragmentManager);this.fragmentList = fragmentList;this.titleList = titleList;this.context = context;}@Overridepublic Fragment getItem(int position) {return fragmentList.get(position);}@Overridepublic int getCount() {return titleList.size();}//注意!!!这里就是我们自定义的布局tab_itempublic View getCustomView(int position){View view= LayoutInflater.from(context).inflate(R.layout.tab_item,null);ImageView iv= (ImageView) view.findViewById(R.id.tab_iv);TextView tv= (TextView) view.findViewById(R.id.tab_tv);switch (position){case 0://drawable代码在文章最后贴出iv.setImageDrawable(context.getResources().getDrawable(R.drawable.home_icon_selector));tv.setText("首页");break;case 1:iv.setImageDrawable(context.getResources().getDrawable(R.drawable.txl_icon_selector));tv.setText("通讯录");break;case 2:iv.setImageDrawable(context.getResources().getDrawable(R.drawable.wd_icon_selector));tv.setText("我的");break;}return view;}
}

 

demo云盘链接:https://pan.baidu.com/s/1FWbP938mW0NB_92WJjHQQA

云盘密码交流:QQ1085220040

demo链接:https://download.csdn.net/download/meixi_android/11225062

 

资讯fragment实现及资讯频道管理:https://blog.csdn.net/meixi_android/article/details/90715243

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415455.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信公众号 自定义菜单栏目

我的核心写法&#xff0c;使用node 官方文档地址 https://mp.weixin.qq.com/wiki?tresource/res_main&idmp1421141013 import * as client from superagent;const createMenu async function () {// ts-ignorelet access_token await this.getGlobalToken();const url …

实验二实验报告

实验过程 实验2.1 实验内容&#xff1a; 参考教材p375,完成链树LinkedBinaryTree的实现&#xff08;getRight,contains,toString,preorder,postorder&#xff09;用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试&#xff0c;提交测试代码运行截图&#xff0c;要全…

ViewPager外部获取“当前显示的页面的位置position”

设置onPageChangeListener方法即可 viewPagerl.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}Overridepublic void onPageSelected(int position) {…

高效update方案

--方案1&#xff1a;如果有索引&#xff0c;先把索引删除后&#xff0c;再update&#xff0c;最后把索引重新创建一下因为索引对update影响很大。--方案2:1.create table newA as select id,name,age1 age from A;2.drop table A;3.rename newA to A--方案3:set autocommit 100…

使用cron表达式 设置定时任务

主要讲解cron表达式。其实只需要掌握6个通配符表达的意思&#xff0c;就可以了。 * * * * * * ┬ ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ | │ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun) │ │ │ │ └───── month (1 - 12) │ │ │ └────────── day …

jmeter之录制控制器与代理的使用

jmeter之录制控制器与代理的使用 1. 先启动jmeter&#xff0c;在测试计划中添加线程组 2. 选中线程组右键添加&#xff0c;在配置元件中点击HTTP请求默认值 3. 选中线程组右键添加&#xff0c;在逻辑控制器中点击录制控制器 4. 工作台中&#xff0c;右…

工作139:生命周期

生命周期是生命周期 执行函数是执行函数 没有必然关系

为什么要进行归一化处理?(从寻找最优解这个角度讨论)

例子 假定为预测房价的例子&#xff0c;自变量为面积&#xff0c;房间数两个&#xff0c;因变量为房价。 那么可以得到的公式为&#xff1a; 其中代表房间数&#xff0c;代表变量前面的系数。 其中代表面积&#xff0c;代表变量前面的系数。 首先我们祭出两张图代表数据是否均一…

Android 获取触摸点坐标,判断滑动方向,滑动距离,滑动速度

activity 或 fragment 实现接口 View.OnTouchListener 如&#xff1a;public class MyFragment extends Fragment implements View.OnTouchListener{ 重写实现方法 Overridepublic boolean onTouch(View v, MotionEvent event) {//继承了Activity的onTouchEvent方法&#xff…

微信小程序 点击按钮 退出

一般右上角的圈圈就可以退出&#xff0c;但是有些场景&#xff0c;需要在页面中点击一下&#xff0c;进行退出。 需要使用navigator实现。 官方文档&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/component/navigator.html 代码如下&#xff0c;可以自己设置…

支付宝错误提示: sign check fail: check Sign and Data Fail JSON also

细节决定命运 &#xff0c;真是体会深刻&#xff01; 支付宝报错&#xff1a;sign check fail: check Sign and Data Fail JSON also 支付宝签名文件错误&#xff0c;查了好几天&#xff0c;密钥、公钥也重新生成了&#xff0c;支付宝也有交易流水&#xff0c;但是查询网关交易…

redis安装笔记

下载redis 官网下载地址&#xff1a;http://redis.io/download github下载地址&#xff1a;https://github.com/MSOpenTech/redis/tags 根据系统版本下载对应版本&#xff0c;下载完放置你要放的盘 然后cmd进入命令行&#xff0c;进入redis目录&#xff0c;然后输入启动命令 re…

vscode 配置 路径别名 @

为了保证多个项目复用代码&#xff0c;我喜欢把路径别名设置为&#xff0c;下面介绍vscode中的配置方法。 1、安装插件Path Intellisense 2、配置 "path-intellisense.mappings": {"": "${workspaceRoot}/src" }3、在项目package.json所在同级…

Android Studio新建类头部注释和添加函数注释模板及快捷键

依次点击——>左上角File——>Setting...——>Editor——>File and Code Templates ——>Includes——>File Header 输入 /** *作者&#xff1a;created by meixi *邮箱&#xff1a;13164716840163.com *日期&#xff1a;${DATE} ${HOUR} */ HOUR------&g…

支付宝支付提示 4006 ISV权限不足

4006 ISV权限不足&#xff0c;查了好几天&#xff0c;终于有结果了&#xff1a;是签约账号已经失效&#xff0c;若要使用接口的话&#xff0c;需要重新签约接口才可以&#xff0c;匹配到正确的接口就可以了。

小程序 canvas 设置 字体 字号加粗

之前的版本使用 现在直接使用CanvasContext.font即可 例如 this.ctx2.font normal bold 40px sans-serif;

关于小码哥kylin

技术格言: 用双手改变人生,用代码改变世界! 个人网站:http://www.isainttech.com QQ:56619556 Email:dragonsaintqq.com 微信:kylin10219556 Kylin开发技术交流群:540749978 转载于:https://www.cnblogs.com/kylinsblog/p/7760383.html