在Activity中添加Fragment

Fragment系列—Activity中添加fragment Fragment的定义和解释这里就不说了,面试的时候也是经常问的到,官方的文档中是推荐和ViewPager一起使用,后期会继续介绍使用方法,但是我们也可以单独使用,会遇到一些小细节问题,如果不加注意会报错的。 1、XML布局文件中添加Fragment。每个Fragment其实类似与一个小型的Activity,所以有它对呀的java类。 public class Example extends 阅读详情

一、在Activity布局文件中静态添加Fragment:

res/layout-large/news_articles.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <fragment android:name="com.example.android.fragments.HeadlinesFragment"
              android:id="@+id/headlines_fragment"
              android:layout_weight="1"
              android:layout_width="0dp"
              android:layout_height="match_parent" />

    <fragment android:name="com.example.android.fragments.ArticleFragment"
              android:id="@+id/article_fragment"
              android:layout_weight="2"
              android:layout_width="0dp"
              android:layout_height="match_parent" />

</LinearLayout>


二、为Fragment指定布局文件:

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.ViewGroup;

public class ArticleFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.article_view, container, false);
    }
}

每个Fragment实例需要关联到一个FragmeActivity,所以要添加Fragment的自定义Activity需继承FragmentActivity;
因为FragmentActivity是定义在API 11 以后的v4 Support Library,且继承自Activity,所以在API 11+的平台上可以直接继承Activity。
如果使用的库是v7 appcompat library,应该继承AppCompatActivity,它是FragmentActivity的子类。

三.动态添加Fragment:注:Activity必须包含一个view容器,用来添加Fragment组件,如:
res/layout/news_articles.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
代码中动态添加:用到FragmentManager和FragmentTransaction类:

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class MainActivity extends FragmentActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.news_articles);

        // Check that the activity is using the layout version with
        // the fragment_container FrameLayout
        if (findViewById(R.id.fragment_container) != null) {

            // However, if we're being restored from a previous state,
            // then we don't need to do anything and should return or else
            // we could end up with overlapping fragments.
            if (savedInstanceState != null) {
                return;
            }

            // Create a new Fragment to be placed in the activity layout
            HeadlinesFragment firstFragment = new HeadlinesFragment();

            // In case this activity was started with special instructions from an
            // Intent, pass the Intent's extras to the fragment as arguments
            firstFragment.setArguments(getIntent().getExtras());

            // Add the fragment to the 'fragment_container' FrameLayout
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.fragment_container, firstFragment).commit();
        }
    }
}
一定要记得调用commit()方法。

四、动态替换Fragment:

// Create fragment and give it an argument specifying the article it should show
ArticleFragment newFragment = new ArticleFragment();
Bundle args = new Bundle();
args.putInt(ArticleFragment.ARG_POSITION, position);
newFragment.setArguments(args);

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack so the user can navigate back
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit();


五、Fragment之间通信:


注:Fragment之间的通信是通过他们关联的Activity进行的,两个Fragment之间不能直接通信
为了让一个Fragment与和它关联的Activity通信,可以在Fragment类中定义一个接口,Activity
类中实现该接口,然后Fragment在它的onAttach()生命周期方法中实例化接口,用该实例去调用
接口中的方法,实现通信,如下所示:

Fragment定义接口:

public class HeadlinesFragment extends ListFragment {
    OnHeadlineSelectedListener mCallback;

    // Container Activity must implement this interface
    public interface OnHeadlineSelectedListener {
        public void onArticleSelected(int position);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        // This makes sure that the container activity has implemented
        // the callback interface. If not, it throws an exception
        try {
            mCallback = (OnHeadlineSelectedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnHeadlineSelectedListener");
        }
    }

    ...
}
Activity实现接口:
public static class MainActivity extends Activity
        implements HeadlinesFragment.OnHeadlineSelectedListener{
    ...

    public void onArticleSelected(int position) {
        // The user selected the headline of an article from the HeadlinesFragment
        // Do something here to display that article
    }
}
调用方法:

 @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        // Send the event to the host activity
        mCallback.onArticleSelected(position);
    }


六.Activity可以调用findFragmentById()方法获取关联于它的Fragment实例,然后可以调用该Fragment的public方法,如:
  ArticleFragment articleFrag = (ArticleFragment)
                getSupportFragmentManager().findFragmentById(R.id.article_fragment);

七、Fragment生命周期方法:
onAttach(): 当该Fragment关联到Activity时调用,Activity作为参数传入;
oncreate(): 与Activity的oncreate()方法一样,实例化该Fragment调用;
oncreateView():创建Fragment自身布局时调用;
onActivityCreated():当与之关联的Activity的oncreate()方法返回时调用;
onStart(),onResume(),onStop(),onPause():这些方法跟Activity的生命周期方法一样;
onDestroyView():与oncreateView()方法相对应;
onDetach():当与Activity接触关联时调用,与onAttach()相对应。

只有当与之关联的Activity处于resumed状态时,Fragment的生命周期方法才可以独立的改变;
否则要受到与之关联的Activity的生命周期方法的限制。

附生命周期图:





ABAP Secure Storage 在事务码 SM59 中的应用 系统管理人员在进行维护时,应关注相关日志信息,及时发现可能出现的安全异常,并针对不同安全等级的操作制定相应的备份与恢复策略,以降低潜在风险。该区域在设计上具备高度隔离性,仅允许经过授权的组件访问。保存后,系统会将密码存储在 Secure Storage 中,这种处理方式充分体现了 SAP 标准程序在安全设计上的考量。对于系统管理员而言,这种机制在日常维护与审计中提供了有力的支持,可以通过比对存储数据的哈希值或其他完整性校验手段,及时发现异常变动,保障系统长期稳定运行。 阅读详情

相关推荐

保姆级教程:在ROS Noetic下,手把手教你将自定义A*全局规划器打包成插件(附避坑指南)

本文提供了一份详细的ROS Noetic下自定义A*全局规划器插件开发指南,涵盖从环境准备、算法优化到插件配置与调试的全流程。通过实战案例和避坑技巧,帮助开发者高效实现机器人导航中的全局路径规划,特别适合需要优化ROS导航栈的开发者。

weixin_29168675的博客 285

android Fragmet的简单使用

Fragment :碎片 与Activity很相似,用来描述一些行为或者一部分UI画面 一个Activity可以用很多Fragment,一个Fragment可以被多个Activity重用 Fragment必须嵌入到一个Activity中,它的声明周期受宿主影响,宿主暂停它暂停,宿主死亡它死亡。 一、Fragment的使用 1.创建Fragment    &nbsp...

New_Bird 601

别再为CAD和GIS数据对不上而头疼了!一份完整的ArcGIS for AutoCAD坐标系定义与数据套合指南

本文详细介绍了如何通过ArcGIS for AutoCAD插件解决CAD与GIS数据坐标系不匹配的问题,实现数据的精准套合。文章从坐标系冲突分析、插件核心功能解析到五步标准化工作流,提供了完整的解决方案,帮助工程师和设计师提升跨平台协作效率。

weixin_42531886的博客 216

activity中添加Fragment

1、在build.gradle中添加如下依赖 def fragment_version = "1.4.1" //kotlin implementation "androidx.fragment:fragment-ktx:$fragment_version" 2、创建一个fragment package com.example.mykotlin2 import android.os.Bundle import androidx.fragment.app.Fragment

nicolelili1的专栏 4200

基于ProXmoX VE的虚拟化家庭服务器(篇一)—ProXmoX VE 安装及基础配置

ProxmoxVE是一款套开源的虚拟化管理软件,用户可通过网页的方式来管理服务器上使用kvm以及lxc技术运行的虚拟机。同时提供了一些先进功能的支持,如集群、HA等。PVE虽然是开源,却是由一个商业公司在运营、更新以及维护。...

隔壁老瓦的专栏 6321

大模型驱动时序量化因子自动优化:从WorldQuant回测到实战策略

本文探讨了如何利用大模型驱动时序量化因子的自动优化,构建从创意生成到实战验证的完整流程。通过结合WorldQuant回测平台,搭建自动化流水线,详细拆解了因子生成、回测验证与迭代优化的核心模块。文章分享了从初版实现到进阶优化的实践经验,并指出提示词工程与领域知识注入是关键,旨在实现人机智能协作,提升量化策略研发效率。

wdx012345的博客 803

Android学习笔记 24. Fragment的产生、使用方法、静态(动态)添加fragment

Android学习笔记 24. Fragment的产生、使用方法、静态(动态)添加fragment

代码改变世界 938

ESP32-S3开发环境避坑指南:VS Code+ESP-IDF离线安装全流程(附国内镜像加速)

本文提供了一份详细的ESP32-S3开发环境离线安装指南,重点解决网络依赖问题。通过整合国内镜像加速,手把手教你完成VS Code、ESP-IDF框架、工具链及Python依赖的本地化部署,实现稳定、可重复的开发环境搭建,大幅提升IoT开发效率。

peach的博客 962

静态以及动态添加Fragment以及基于接口的Fragment通信

首先,什么是Fragment: Fragment也可以叫为“片段”,它可以表示Activity中的行为或用户界面部分。我们可以在一个Activity中用多个Fragment组合来构建多窗格的UI,以及在多个Activity中重复使用某个Fragment。它有自己的生命周期,能接受自己的输入,并且可以在 Activity 运行时添加或删除Fragment(有点像在不同 Activity 中重复使用的“子 Activity”)。 例如: 其次,我们需要了解Fragment的生命周期 这里对回调方法做一个

snowxiao的博客 291

CoppeliaSim学习笔记(1):建立Python脚本与CoppeliaSim的连接

CoppeliaSim学习笔记,建立python和CoppeliaSim的连接,实现联调。

qq_22487889的博客 1万+

16、保障Azure应用安全:密钥管理与身份认证

本文深入探讨了保障Azure应用安全的关键措施,包括使用网络安全工具(如Application Gateway和Azure Front Door)防范攻击,解决传统密钥和机密存储方式的安全隐患,以及通过Azure Key Vault实现敏感信息的安全管理。同时,介绍了使用托管标识实现Azure资源间安全访问的方法,并结合实际操作步骤展示了如何配置Key Vault、设置访问策略、存储机密以及授予Web应用对SQL Server的访问权限。最后,对不同安全措施进行了比较,并提出了在开发、测试及生产环境中的综合

rock5的博客 72

笔记 向Activity中添加Fragment:

向Activity中添加Fragment,有两种方法: 直接在布局文件中添加,将Fragment作为Activity整个布局的一部分 直接在布局文件中添加Fragment可以使用fragment /fragment标记实现 在fragment /fragment标记中,android:name属性用于指定要添加的Fragment 当Activity运行时,将Fragment放入Activity布...

兔丸的博客 3051

纳米尺度仿真软件:GROMACS_(3).分子动力学模拟原理

分子动力学(MD)模拟是一种强大的计算方法,通过数值积分牛顿运动方程,追踪粒子在时间上的位置和速度变化,提供关于体系动力学行为的详细信息。选择合适的力场、设置初始条件、应用边界条件、控制温度和压力、选择合适的时间步长、计算能量和力,是 MD 模拟的关键步骤。通过这些步骤,可以对各种化学、生物和材料体系进行模拟和分析,揭示其结构、动力学和热力学性质。高级应用如反应路径模拟和蛋白质折叠研究,进一步扩展了 MD 模拟的应用范围。

kkchenjj的博客 1100

如何将fragment添加到activity中? -通过XML

你知道,在android中,一个activity有一个与之相关的生命周期,activity接收它们自己的输入事件。与activity一样,fragment也具有与其关联的生命周期并接收其自己的输入事件。

小云同志你好的博客 1183

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Fragment动态添加、及与Activity数据传递

转载请注明出处:http://blog.youkuaiyun.com/mr_leixiansheng/article/details/54174348 1、Fragment静态添加 :http://blog.youkuaiyun.com/mr_leixiansheng/article/details/54172388 2、Fragment动态添加 :http://blog.youkuaiyun.com/mr_leixi...

Mr_Leixiansheng的博客 2440

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android 创建Fragment然后添加到Activity中

Fragment instantiate(Context context, String fname, @Nullable Bundle args)这个方法可以算是实例化一个Fragment, 可能我这种说法有点不对,不过大概的意思就是想把自定义的Fragment加到Activity中去的意思.希望大家明白这点就OK 首先新建自己定义的CoolFragment.class跟对应的布局fragm

无论何时都不要停止学习,这是改变自己的必要条件 2472

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android Activity内嵌Fragment,当Activity recreate时Fragment被添加多次,造成界面重叠

由于某些原因,例如旋转屏幕,内存不足时,造成Activity被destroy() ,或者切换语言环境时,我们recreate()该Activity。这时,如果在该Activity的onCreate中未区分是create 还是recreate就add Fragment,则会再次add一次该Fragment,造成该Activity中会存在多个相同的Fragment.而导致界面重叠的情况。这种情况下,我...

Angelica 3680

静态注册fragment_Fragment的静态和动态添加方式以及Fragment和Activity之间的通信方式...

一、静态添加方式:创建好Fragment之后,在需要使用碎片的Activity的布局文件中添加标签。二、动态添加方式:先创建好fragment的布局文件,然后创建一个继承自Fragment的类(此处为MyFragment),之后在重写的方法中加载好布局文件。然后在需要加载布局文件的Activity中添加如下代码:​ MyFragment fragment = new MyFragment();Fr...

weixin_39998881的博客 407

Activity中动态添加Fragment.

在Activity中添加Fragment。//获取支持包中的FragmentManager(); FragmentManager mFragmentManager = getSupportFragmentManager(); //动态添加的Fragment ExampleFragment mExampleFragment = new mExampleFragment(); //通过beginTran

Seven Chen 文艺程序猿的成长之路 2593

【面试】如何向Activity当中动态添加Fragment

①建立一个继承于Fragment的类Fragment1.class; import android.annotation.SuppressLint; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Vi...

degqvm2263的博客 177

Fragment 和 Activity 添加回调

在Fragment添加回调在Activity中实现,或者在activity中添加回调在Fragment中实现。用于监听一些事件变化,或者传递一些数据。 首先。添加interface回调文件,实例代码如下: public interface MessageCallBack { void sendMsg(String msg); } 接下来先说说在Fragment中添加回调,在Activit...

lixinxiaos的博客 921

fragment中添加fragment与activity中添加fragment的不同

activity中添加fragment FragmentTransaction transaction=getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.fragment_container,rentFragment).commit(); 或者transaction.add(R.id.fragm

难不难的博客 1661

Android Fragment的动态添加,Fragment,Activity以及Fragment之间的通信方式

1。Android Fragment的动态添加 /* 动态添加碎片 * 1.创建带添加的碎片实例 * 2.获取FragmentManager,在活动中可以直接调用getFragmentManager()方法获得. * 3.开启一个事物,通常需要使用FragmentManager的beginTransaction方法 * 4.向容器中添加碎片,一般使用replace()方法实

歌楼听雨品人生 584

Activity recreate时导致Fragment被添加多次,显示混乱问题

在某些场景下,旋转屏幕、内存不足,或app内切换语言主动调用reCreate()方法,造成Activity被destroy ,系统会recreate 重新创建该Activity ,会重走onCreate()方法,如果Activity的onCreate中存在add Fragment操作,则会再次add一次该Fragment,造成该Activity中FragmentManager添加了多个相同的Fr...

大漠-孤烟 1705

Activity中添加和替换Fragment

关于Fragment和Activity的使用就弄了一个小时 中间还报过错,对于as小白来说,不慌不忙的搞定了在Activity中添加和替换Fragment的功能。下面上图 接下来,第一步就是创建一个ContianerActivity 放入一个Button和放入FramLayout,将FramLayout设定一个容器并且给定一个id为fl_container方便找到这个AFragment容器,将AF...

weixin_43947715的博客 2059

Activity内嵌Fragment,当Activity recreate时Fragment被添加多次,造成相互遮盖

问题描述:由于某些原因(如旋转屏幕,或内存不足时)造成Activity被destroy ,当再次回到该Activity时,系统会recreate 该Activity , if your activity instance is destroyed and recreated, the state of the layout is restored to its previous state w

cxcbupt 3406
上一篇: Android支持不同设备上的显示
下一篇: Service 绑定
ssjj_programmer
博客等级 码龄11年 2粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值