在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的生命周期方法的限制。

附生命周期图:





(2024,DDPM,DDIM,流匹配,SDE,ODE)扩散:基础教程 本文的目标是尽可能简单地教授扩散。第一节介绍扩散的基本原理。第二节和第三节展示如何构建随机和确定性扩散采样器。第四部分介绍了密切相关的流匹配,可看作是扩散的推广。​第五节,强调实践中最重要的一些设计选择,包括采样器、噪声时间表和参数化方法。 阅读详情

相关推荐

告别PlatformIO!用Arduino IDE搞定ESP32上的micro-ROS 2.0.5(Humble版)

本文详细介绍了如何从PlatformIO迁移到Arduino IDE以支持ESP32上的micro-ROS 2.0.5(Humble版)。内容涵盖环境配置、项目转换、常见问题解决及高级优化技巧,帮助开发者顺利过渡并充分利用Arduino IDE的官方支持优势。

weixin_33709590的博客 378

android Fragmet的简单使用

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

New_Bird 601

阿里云习题多选部分459道

比如: UserA的用户在杭州有一台经典网络的ECS云服务器InstanceA (内网IP: A.A.A),InstanceA所属的默认安全组为GroupA, UserB的用户在杭州有一台经 典网络的ECS云服务器InstanceB(内网IP:B.B.B),InstanceB所属的默认安全组为GroupB。43.创建阿里云的云服务器ECS实例之前,需要对ECS实例的配置进行选型,阿里云为用户提供了推荐的配置组合方案来满足大部分用户的需求,这些推荐配置只是作为开始使用云服务器ECS实例的参考。

2501_91384465的博客 1310

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

Windows 10 下 DockerToolbox 安装全攻略:从下载到配置阿里云镜像加速

本文详细介绍了在Windows 10系统上安装和配置DockerToolbox的完整流程。从下载安装包、执行初步安装,到关键步骤——修改虚拟机存储路径以及配置阿里云镜像加速器,旨在帮助开发者,尤其是初次接触Docker的新手,快速搭建高效的本地容器开发环境,并解决国内镜像下载缓慢的痛点。

moon9的博客 476

AVM环视算法实战:从3D碗型投影到多场景模式切换的实现与优化

本文深入探讨了AVM环视算法在3D碗型投影和多场景模式切换中的实现与优化。通过分析3D碗型投影的核心原理和动态视角调节技术,展示了如何实现从超广角模式到转向模式的无缝切换。文章还分享了性能优化实战经验,包括实时性提升和图像拼接质量优化,为开发者提供了宝贵的AVM系统开发指南。

weixin_42573113的博客 170

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

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

代码改变世界 938

从安装Eclipse 开始 开发第一个 CDS View

一篇超级简单快速的 创建CDS VIEW 入门步骤介绍文章。

IT小职员 4249

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

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

snowxiao的博客 291

从零到一:在K210上实现YOLO模型在线训练与部署全流程

本文详细介绍了在K210芯片上实现YOLO模型在线训练与部署的全流程,涵盖数据采集、模型优化、量化转换及内存管理等关键环节。通过实战案例和代码示例,帮助开发者高效利用K210的超低功耗特性与YOLO模型的实时检测能力,适用于边缘计算和物联网应用场景。

weixin_29094539的博客 350

innovus中如何设置cts参数

上面是设置cts的一般设置,如果需要对某些skew group或者某些clock tree设置不一样的参数,如需要对clk1这个clock设置不一样的inverter,可以使用。需要查询已经设置过的ccopt参数,可以使用get_ccopt_property去查询,方法和set_ccopt_property一致。言归正传,cts的设置命令是set_ccopt_property,获取命令是get_ccopt_property。另外,set_ccopt_property提供一套命令查询方法。

芯冰乐 544

笔记 向Activity中添加Fragment:

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

兔丸的博客 3051

2023华为OD面试手撕真题【最长公共前缀】

2023华为OD面试手撕真题【最长公共前缀】

MISAYAONE的博客 5241

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

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

小云同志你好的博客 1183

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

OV9734 DATASHEET,完整规格书

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

Android 创建Fragment然后添加到Activity中

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

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

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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、付费专栏及课程。

余额充值