创建新项目,选择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可滑动界面的更多相关文章

  1. 通过Activity动态加载Fragment创建主界面构架

    在做项目中,需要建立一个主界面框架,尝试过使用ViewPager ,后来又换成了使用Activity动态加载Fragment实现选项卡的效果.总结一下方便以后回顾. 先给出总体效果: 要实现上述效果, ...

  2. ViewPager + Fragment 实现主界面底部导航栏

    1. 四个类似的Frament布局 tab_main_fragment.xml <LinearLayout xmlns:android="http://schemas.android. ...

  3. 使用OC和swift创建系统自带的刷新界面

    使用OC和swift创建系统自带的刷新界面 一:swift刷新界面代码: import UIKit class ViewController: UITableViewController { // 用 ...

  4. android关于实现滑动界面

    首先要说的是,滑动界面,我们需要一个以上的view切换,实际上可以使用ArrayList<View> pageViews要保存view信息,然后切换 LayoutInflater infl ...

  5. 【转】SQL Server 创建约束图解 唯一 主键-界面操作

    SQL Server 创建约束图解 唯一 主键-界面操作 SQLServer中有五种约束,Primary Key约束.Foreign Key约束.Unique约束.Default约束和Check约束, ...

  6. fragment滑动界面

    1.代码页面 package com.example.fragment_list_copy; import android.app.FragmentManager;import android.sup ...

  7. viewpager fragment 滑动界面

    先新建几个fragment,包括java和xml 然后在主界面的布局文件中: <android.support.v4.view.ViewPager android:id="@+id/m ...

  8. Android Studio 使用ViewPager + Fragment实现滑动菜单Tab效果 --简易版

    描述: 之前有做过一个记账本APP,拿来练手的,做的很简单,是用Eclipse开发的: 最近想把这个APP重新完善一下,添加了一些新的功能,并选用Android Studio来开发: APP已经完善了 ...

  9. ViewPager+Fragment实现滑动显示,且Fragment里面又放Fragment+viewPager

    思路:新建一个Activity,且这个Activity要继承FragementActivity,在Activity的布局文件中放入了一个viewPager,为了效果好看,还做了个导航,使得ViewPa ...

随机推荐

  1. 002_C/C++笔试题_简单算法程序

    (一)冒泡排序法 #include <iostream> using namespace std; void bubblesort(int a[], int m); int main(vo ...

  2. sql server 存储过程和视图的区别

    视图 要把视图看做是一张表,包含了一张表的部分数据或者多个表的综合数据,视图的使用和普通表一样: 视图建立并存储在服务器,有效减少网络数据流量,提高安全性: 视图中不存放数据,数据依然存放在视图引用的 ...

  3. java新建excel文件导出(HSSFWorkbook)

    public ActionForward exportExcel(ActionMapping mapping, ActionForm form, HttpServletRequest request, ...

  4. 路由器配置——DHCP+DHCP中继服务配置

    一.实验目的:掌握DHCP服务基本配置及DHCP中继服务配置,实现全网互通 二.拓扑图: 三.具体步骤配置: (1)R1路由器配置: Router>enable  --进入特权模式 Router ...

  5. 51nod 1051

    * 最大子矩阵 * sum[i][j] 表示第 i 行前 j 列的和,即每一行的前缀 * i,j 指针枚举列,k指针枚举行 * Now 记录当前枚举的子矩阵的价值 * 由于记录了前缀信息,一旦 Now ...

  6. Django RestFramework (DRF)

    准备: 下载 pip install djangorestframework 一 APIView源码解析 1 预备知识 CBV(class based view)FBV(function based ...

  7. 8月清北学堂培训 Day 7

    当天走得太兴奋了,忘记保存就关电脑了o(╥﹏╥)o,现在补上( p′︵‵.) 今天是杨思祺老师的讲授~ 练习题 首先求出最短路: 如果选择的边不是最短路上的边,那么毫无影响: 对于最短路径上的边,我们 ...

  8. MySQL数据分析-(1) 数据库前言

    (一)开场白 大家好,欢迎大家跟我一起学习<MySQL数据分析实战>这门课程,对于数据分析师来说,数据库是每一个从业者都必须掌握的课程,我们这门课是从实战的角度出发,我会帮助大家梳理MyS ...

  9. vue 重置data中表单form的值 重置变量

    export default { data() { return { form:{ name:"张三", age:13, sex:1, address:"" } ...

  10. 微信小程序之简单记账本开发记录(五)

    样式表和大致布局在昨天已构建好,今天完成页面结构部分 结果如下图所示