创建多个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 ...
随机推荐
- 3、获取Class对象的三种方式
3.获取Class对象的三种方式 要想对字节码文件进行解刨,必须要有字节码文件对象 Object类中的getClass方法 通过对象静态属性 .class来获取对应的Class对象 只要通过给定类的字 ...
- Codeforces Round #429 (Div. 2/Div. 1) [ A/_. Generous Kefa ] [ B/_. Godsend ] [ C/A. Leha and Function ] [ D/B. Leha and another game about graph ] [ E/C. On the Bench ] [ _/D. Destiny ]
PROBLEM A/_ - Generous Kefa 题 OvO http://codeforces.com/contest/841/problem/A cf 841a 解 只要不存在某个字母,它的 ...
- mysql远程服务密码修改
GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "root"; FLUSH PRIVILEGE ...
- spring 定时任务的 执行时间设置规则-----看完这篇就懂了
单纯针对时间的设置规则 org.springframework.scheduling.quartz.CronTriggerBean允许你更精确地控制任务的运行时间,只需要设置其cronExpressi ...
- CF940F Machine Learning 带修改莫队
题意:支持两种操作:$1.$ 查询 $[l,r]$ 每个数字出现次数的 $mex$,$2.$ 单点修改某一位置的值. 这里复习一下带修改莫队. 普通的莫队中,以左端点所在块编号为第一关键字,右端点大小 ...
- 一些特殊的矩阵快速幂 hdu5950 hdu3369 hdu 3483
思想启发来自, 罗博士的根据递推公式构造系数矩阵用于快速幂 对于矩阵乘法和矩阵快速幂就不多重复了,网上很多博客都有讲解.主要来学习一下系数矩阵的构造 一开始,最一般的矩阵快速幂,要斐波那契数列Fn=F ...
- 《剑指offer》数组中只出现一次的数字
本题来自<剑指offer> 数组中只出现一次的数字 题目: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 思路: 思路一:在<剑指of ...
- shell 获取指定ip的丢包率
shell 获取指定ip的丢包率 丢包率大于10%就重新网络 使用sed 替换字符串 [[ $(ping -c 10 -W 1 baidu.com | awk '$6 ~ /%/{print $6}' ...
- [报错解决] 关于windows下 使用Anaconda3安装的python无法使用ssl模块问题.关联pip无法下载https
关联错误: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not ...
- 2019.7.9 校内测试 T1挖地雷
这一次是交流测试?边交流边测试(滑稽 挖地雷 这个题是一个递推问题. 首先我们看第一个格子,因为它只影响了它的上面和右上面这两个地方是否有雷. 我们可以分3种情况讨论: 1. 第一个格子的数字是2: ...