iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android-实现切换Fragment页功能的实现代码
  • 754
分享到

Android-实现切换Fragment页功能的实现代码

fragmentAndroid 2022-06-06 04:06:23 754人浏览 泡泡鱼
摘要

场景:使用Fragment实现切页。 类结构: 一:Activity Activity中使用getSupportFragmentManager().beginTrans

场景:使用Fragment实现切页。

类结构:

一:Activity

Activity中使用getSupportFragmentManager().beginTransaction()来填充一个Fragment(管理用的FragmentA)

Activity部分代码:


FragmentA fragment = FragmentA.newInstant(null);
getSupportFragmentManager().beginTransaction().add(R.id.f_tab_fragment,fragment).commit(); 

XML:


     <FrameLayout
        Android:id="@+id/fl_container"
        android:layout_width="match_parent"
        android:layout_above="@+id/f_tab_fragment"
        android:layout_height="match_parent"/>
      <FrameLayout
        android:id="@+id/f_tab_fragment"
        android:layout_width="match_parent"
        android:layout_height="52dp"
        android:layout_alignParentBottom="true"/> 

二:FragmentA

加载一个主FragmentA,作为管理其它子叶片FragmentX。

现在比如有两个子叶片FragmentB、FragmentC.

FragmentA 使用FragmentManager和FragmentTransaction管理FragmentB、FragmentC的切换 

FragmentA代码:


 public class FragmentA extends BaseFragment {
  private static final String TAB_HOME = com.timediffproject.module.home.MyMainFragment.class.getName();
  private static final String TAB_TEST = com.timediffproject.module.home.TestFragment.class.getName();
  private BaseFragment mLastShowFragment;
  private static TabFragment fragment;
  public static TabFragment newInstant(Bundle bundle){
    if (fragment == null){
      fragment = new TabFragment();
      fragment.setArguments(bundle);
    }
    return fragment;
  }
  @Override
  public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    initTabInfo();
  }
  private void initTabInfo(){
    FragmentManager fm = getFragmentManager();
    if (fm == null){
      return;
    }
    FragmentTransaction ft = fm.beginTransaction();
    BaseFragment home = (BaseFragment) fm.findFragmentByTag(TAB_HOME);
    if (home != null){
      ft.hide(home);
    }
    BaseFragment test = (BaseFragment) fm.findFragmentByTag(TAB_TEST);
    if (test != null){
      ft.hide(test);
    }
    ft.commit();
  }
  @Nullable
  @Override
  public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_tab,container,false);
  }
  @Override
  public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    view.findViewById(R.id.btn_change_home).setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        switchTo(TAB_HOME,null);
      }
    });
    view.findViewById(R.id.btn_change_test).setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        switchTo(TAB_TEST,null);
      }
    });
    switchTo(TAB_HOME,null);
  }
  //切换Fragment的方式(FragmentB、FragmentC)
  //tab为Fragment的类名(如:FragmentB.class.getName())
  //R.id.fl_container是在Activity的布局里,不是在FragmentA的布局里
  private void switchTo(String tab, Bundle bundle){
    //初始化管理Fragment的类
    FragmentManager fm = getFragmentManager();
    if (fm == null){
      return;
    }
    FragmentTransaction ft = fm.beginTransaction();
    //从FragmentManager里寻找类名为tab的Fragment
    BaseFragment fragment = (BaseFragment)fm.findFragmentByTag(tab);
    if (fragment == null){
      fragment = (BaseFragment) Fragment.instantiate(getActivity(),tab);
      fragment.setArguments(bundle);
      ft.add(R.id.fl_container,fragment,tab);
    }else{
      ft.show(fragment);
    }
    //隐藏现在正显示的Fragment
    if (mLastShowFragment != null) {
      ft.hide(mLastShowFragment);
    }
    //记录最后点击的Fragment
    mLastShowFragment = fragment;
    ft.commitAllowingStateLoss();
  }
} 

XML:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="Http://schemas.android.com/apk/res/android"
  android:orientation="horizontal" android:layout_width="match_parent"
  android:layout_height="52dp">
  <Button
    android:id="@+id/btn_change_home"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="切换home"
    />
  <Button
    android:id="@+id/btn_change_test"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="切换test"
    />
</LinearLayout> 

三:FragmentX(FragmentB、FragmentC)

子页的逻辑根据具体业务自己定义,实现与一般Fragmeng一样

 例如:


public class TestFragment extends BaseFragment {
  @Nullable
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {return inflater.inflate(R.layout.fragment_test,container,false);
  }
  @Override
  public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
  }
} 

到这里,就可以简单的实现-用底部Tab切换Fragment实现切页的功能

附图:

 

PS:实现过程中出现的错误 

代码如下:
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

正确方式: 有关的fragment的初始化布局应该加上false,与父类布局建立关系。

原因:不加的话这个inflater出来的view系统会绑定一个未知父类,这时候当你把这个fragment又作为子页绑定给Activity或者另一个fragment时,就会出现以上错误。


@Nullable
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    //这里正确的写法是:
    //return inflater.inflate(R.layout.fragment_test,container,false);
    return inflater.inflate(R.layout.fragment_test,container);
   }   

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

您可能感兴趣的文章:Android中Fragment相互切换间不被回收的实现方法一个Activity中多个Fragment的切换Android UI实现底部切换标签fragmentAndroid 保存Fragment 切换状态实例代码Android App中使用ViewPager+Fragment实现滑动切换效果Android中使用TabHost 与 Fragment 制作页面切换效果Android使用Fragment打造万能页面切换框架Android Fragment中使用SurfaceView切换时闪一下黑屏的解决办法Android基础之使用Fragment控制切换多个页面anndroid使用ViewPager实现三个fragment切换


--结束END--

本文标题: Android-实现切换Fragment页功能的实现代码

本文链接: https://www.lsjlt.com/news/22274.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android-实现切换Fragment页功能的实现代码
    场景:使用Fragment实现切页。 类结构: 一:Activity Activity中使用getSupportFragmentManager().beginTrans...
    99+
    2022-06-06
    fragment Android
  • Android实现夜间模式切换功能实现代码
    现在很多App都有夜间模式,特别是阅读类的App,夜间模式现在已经是阅读类App的标配了,事实上,日间模式与夜间模式就是给App定义并应用两套不同颜色的主题,用户可以自动或者手...
    99+
    2022-06-06
    Android
  • Android 保存Fragment 切换状态实例代码
    前言  一般频繁切换Fragment会导致频繁的释放和创建,如果Fragment比较臃肿体验就非常不好了,这里分享一个方法。  正文  一、应用场...
    99+
    2022-06-06
    fragment Android
  • Android UI实现底部切换标签fragment
    本篇博客要分享的一个UI效果——实现底部切换标签,想必大家在一些应用上面遇到过这种效果了,最典型的就是微信了,可以左右滑动切换页面,也可以点击标签页滑动页面,它们是如何实现的呢...
    99+
    2022-06-06
    fragment Android
  • Android ViewPager撤消左右滑动切换功能实现代码
    最近做项目要求某种情况下ViewPager不能滑动,那么我们只需要重写这个方法就可以禁止ViewPager滑动。下面通过本文给大家ViewPager取消左右滑动切换功能的实例代...
    99+
    2022-06-06
    viewpager Android
  • Android实现系统语言切换功能
    简单介绍下这个需求的缘由,这段时间因公司业务需要,其中有一项“设置系统语言”功能,就是在使用APP的过程中,动态的去切换整个Android机器的语言,具体参照手机设置页面有语言...
    99+
    2022-06-06
    系统 Android
  • Android实现图片轮播切换实例代码
    利用Android的ViewFlipper和AnimationUtils实现图片带有动画的轮播切换,其中当点击“上一张”图片时,切换到上一张图片;当点击“下一张”图片时,切换到...
    99+
    2022-06-06
    图片 轮播 Android
  • WPF实现页面的切换的示例代码
    目录前言一、准备工作二、实现1.使用Frame控件的方式实现2.使用反射的方式实现3.实现效果总结前言 本文主要讲述如何在同一个窗体内,实现不同功能模块的页面切换。 一、准备工作 1...
    99+
    2023-01-30
    WPF 页面切换 WPF 切换页面
  • Android使用ViewFlipper实现图片切换功能
    今天给大家简单的讲一下Android手势,目前市场上的App中手势的运用比较少。 Android提供了两种手势: ①.Android提供了手势检测,并为手势检测提供了相应的监听器 ②.Android允许开发者添加手势,并提供了相应的API识...
    99+
    2023-05-30
    android viewflipper 图片切换
  • Android如何实现Tab切换界面功能
    这篇文章主要介绍“Android如何实现Tab切换界面功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android如何实现Tab切换界面功能”文章能帮助大家解决问题。一、实验目的 掌握各种高级U...
    99+
    2023-06-30
  • Android基于ImageSwitcher实现图片切换功能
    左右切换图片控件大家都用ViewPager, ViewFipper比较多吧,我之前也用ViewPager实现了,使用ViewPager实现左右循环滑动图片,有兴趣的可以去看下,...
    99+
    2022-06-06
    图片 Android
  • Android实现Tab切换界面功能详解
    目录一、实验目的二、实验任务三、实验内容与要求四、实现效果五、代码实现 六、实验总结一、实验目的 1. 掌握各种高级UI控件的基本使用; 2. 能够实现Tab切换效果。 二...
    99+
    2022-11-13
  • Android编程实现的首页左右滑动切换功能示例
    本文实例讲述了Android编程实现的首页左右滑动切换功能。分享给大家供大家参考,具体如下:很多软件会选择左右滑动的主界面,实现方式也很多,这里的仅供参考,勿喷。不多说什么了,相信大家看看代码就明白,自己也不善言辞,望大家谅解。自定义接口,...
    99+
    2023-05-30
    android 滑动 切换
  • Android实现移动小球和CircularReveal页面切换动画实例代码
    前言本文主要给大家介绍了关于Android如何实现移动小球和CircularReveal页面切换动画的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。效果图如下是在fragment中跳转activity实现的效果,...
    99+
    2023-05-30
    android 小球移动 circularreveal
  • Android实现app应用多语言切换功能
    最近在做一个多语言切换的功能,类似于微信的语言切换,搜了下资料基本上都是以下这种: 1. 实现的效果   和微信类似,在设置界面打开切换语言的界面,选择语言后重...
    99+
    2022-06-06
    多语言 app Android
  • Android app应用多语言切换功能实现
    本文实例为大家分享了Android app应用实现多语言切换功能,供大家参考,具体内容如下 1.添加多语言文件 在不同的 value 文件夹下(例如 value 、value...
    99+
    2022-06-06
    多语言 app Android
  • Android实现应用内置语言切换功能
    一、需求 有时候应用需要在内部切换语言但又不影响系统的语言,比如是应用现在是中文的,系统语言也是中文的,我把应用的切换成英文显示后系统语言还是中文的,系统语言切换后也不会被改...
    99+
    2022-06-06
    Android
  • Android实现界面左右滑动切换功能
    相信大家一定都使用过手机QQ和微信之类的软件,当我们使用时不难发现其界面的切换不仅可以通过点击页标签来实现,还可以通过左右滑动来实现的,耗子君刚开始学Android时就觉得这样...
    99+
    2022-06-06
    界面 Android
  • Android 验证码功能实现代码
    先给大家展示下效果图,如果大家感觉还不错,请参考实现代码 很简单的一个例子,点击刷新验证码,刷新当前显示的验证码,点击确定,如果输入的和显示的匹配,就会跳转到下一个界面中,这...
    99+
    2022-06-06
    验证码 Android
  • Android应用中怎么实现一个滑动切换页面功能
    Android应用中怎么实现一个滑动切换页面功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 TabLayou 主要实现的是标题头的 滑动 这个 控件 类似于 Sc...
    99+
    2023-05-31
    android roi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作