创建多个Fragment可滑动界面
创建新项目,选择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;

创建多个Fragment可滑动界面的更多相关文章
- 通过Activity动态加载Fragment创建主界面构架
在做项目中,需要建立一个主界面框架,尝试过使用ViewPager ,后来又换成了使用Activity动态加载Fragment实现选项卡的效果.总结一下方便以后回顾. 先给出总体效果: 要实现上述效果, ...
- ViewPager + Fragment 实现主界面底部导航栏
1. 四个类似的Frament布局 tab_main_fragment.xml <LinearLayout xmlns:android="http://schemas.android. ...
- 使用OC和swift创建系统自带的刷新界面
使用OC和swift创建系统自带的刷新界面 一:swift刷新界面代码: import UIKit class ViewController: UITableViewController { // 用 ...
- android关于实现滑动界面
首先要说的是,滑动界面,我们需要一个以上的view切换,实际上可以使用ArrayList<View> pageViews要保存view信息,然后切换 LayoutInflater infl ...
- 【转】SQL Server 创建约束图解 唯一 主键-界面操作
SQL Server 创建约束图解 唯一 主键-界面操作 SQLServer中有五种约束,Primary Key约束.Foreign Key约束.Unique约束.Default约束和Check约束, ...
- fragment滑动界面
1.代码页面 package com.example.fragment_list_copy; import android.app.FragmentManager;import android.sup ...
- viewpager fragment 滑动界面
先新建几个fragment,包括java和xml 然后在主界面的布局文件中: <android.support.v4.view.ViewPager android:id="@+id/m ...
- Android Studio 使用ViewPager + Fragment实现滑动菜单Tab效果 --简易版
描述: 之前有做过一个记账本APP,拿来练手的,做的很简单,是用Eclipse开发的: 最近想把这个APP重新完善一下,添加了一些新的功能,并选用Android Studio来开发: APP已经完善了 ...
- ViewPager+Fragment实现滑动显示,且Fragment里面又放Fragment+viewPager
思路:新建一个Activity,且这个Activity要继承FragementActivity,在Activity的布局文件中放入了一个viewPager,为了效果好看,还做了个导航,使得ViewPa ...
随机推荐
- axios并行请求
有些操作需要在几个异步请求都完成之后再执行,虽然一个Ajax可以放到另一个Ajax完成的回调里面,但这样很容易导致回调地狱,且代码也极其不美观. 幸运的是axios提供了并行请求的方法, 使用方法: ...
- sql时间加减
/时间转成年月日时分秒select date_format(now(),'%Y%m%d%H%i%S')//时间转成年月日select date_format(now(),'%Y%m%d')//去年此时 ...
- STS工具引入jar报问题?(问题待解决)
pom.xml文件中先引入ojdbc6,后修改成ojdbc7了,为啥还报下面的错误: Project 'nx-test-mybatis-oracle' is missing required libr ...
- 虚拟机Linux无法查看本地ip地址 解决办法
解决方案: 1.虚拟机与本机采用的连接方式为:Host-only模式,其中几种连接模式的区别我不做介绍,自己百度.如果之前连接方式不为Host-only,更改之后需要重新启动虚拟机. 2.将本机的两块 ...
- UVALive 3716 DNA Regions ——(扫描法)
乍一看这个问题似乎是很复杂,但其实很好解决. 先处理出每个点到原点的距离和到x正半轴的角度(从x正半轴逆时针旋转的角度).然后以后者进行排序. 枚举每一个点到圆心的距离,作为半径,并找出其他到圆心距离 ...
- vs.net2017在编辑的wpf的xaml文件引用本程序集下的类提示“找不到”
local对应就是当前exe程序下的类,会提示“...命令空间...找不到...” 因为我调整过生成的,于是尝试调回来anyCPU 问题解决. 看了一下vs.net2017的所在目录"C:\ ...
- ubuntu下安装g++
主要来自ubuntu中文社区http://www.ubuntu.org.cn/support/documentation/doc/VMware 首选,确认你已经安装了build-essential程序 ...
- 如何配置WAMP环境(主要是Apache与PHP)
1.配置Apache 1.编辑Apache配置文件---http.conf(位于安装目录下的conf子目录内): 2.修改Document Root 和 Directory选项,这是修改Apache的 ...
- Xshell查看日志
查询日志命令(复制后鼠标右键粘贴): tail -1000f /mnt/logs/SMFManagement/SMFManagement_info.log
- 在Vue文件中引用模块的相对路径“@“符号表示什么意思?
@ 的作用是在你引入模块时,可以使用 @ 代替 /src 目录,避免书写麻烦又易错的相对路径. import model from "@/common/model"; // 默认路 ...