首页 > 其他分享 >19.14.Android四大组件之一活动单元Activity 下

19.14.Android四大组件之一活动单元Activity 下

时间:2024-04-07 10:56:46浏览次数:21  
标签:androidx Fragment 19.14 Activity import FragmentManager Android fragmentManager

任务栈和启动模式
Fragment

1. 关于任务栈和启动模式(了解)

Android中的任务栈 压栈和出栈 即开启的往里面压位于最上面 找哪个上面的被弹出

启动模式四种模式:

  • standard

每启动一个Activity就创建一个实例

  • singleTop模式

判断是否存在Activity位于栈顶 如果存在直接复用 否则创建

  • singleTask模式

判断是否存在Activity 如果存在直接复用 并把它上面的都弹出

  • singleInstance模式

如果Activity不存在 创建一个新的任务栈然后压入 否则将其转移前台


2. Fragment(重点)

Fragment生命周期
一句话
Fragment伴随Activity 它启动它就启动 它暂停它就暂停 销毁就都玩完
多了几个方法
最常用的是
onCreateView()Fragment创建视图(加载布局)时调用
具体参考activity生命周期的方法 查看logcat日志验证

我们做任何事情上来就做困难的很难理解透彻
应该从小到大
就像我记得小时候一个朋友说的话 不喜欢喝粥 但他说盖房子只放砖就行了吗 粥就像是水泥一样 得用 这样房子才坚固


来吧看一个简单的例子(参考蚊香一言)
因为在仿美团外卖项目中有个坑 一会介绍一下
大致就是一个 Activity 向 一个 Fragment传递信息

来看这个是activity的layout页面 点击后FrameLayout显示activity传递的信息

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/a_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Activity向Fragment传递数据" />

    <FrameLayout
        android:id="@+id/a_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </FrameLayout>
</LinearLayout>

跳过FrameLayout那个了就是简单显示个Textview


import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

public class AfragmentActivity extends AppCompatActivity {
    private Button a_button;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_activity);

        a_button=findViewById(R.id.a_button);

        a_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 使用Bundle类 传数据
                Bundle bundle = new Bundle();
                bundle.putString("gao","高远");


                //在Activity中动态加载Fragment 必须五步

                //1.实例化Fragment对象(获取Fragment对象)
                FragmentActivity fragmentActivity = new FragmentActivity();

                //2.(创建)获取Fragment管理器
                // FragmentManager fragmentManager = getFragmentManager();
                FragmentManager fragmentManager = getSupportFragmentManager();

                //3.开启FragmentTransaction事务
                FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

                //4.向FrameLayout中添加Fragment
                // fragmentTransaction.add(R.id.a_frame,fragmentActivity);
                fragmentTransaction.replace(R.id.a_frame,fragmentActivity);

                // 将数据传递给Fragment
                fragmentActivity.setArguments(bundle);

                //5.提交事务
                fragmentTransaction.commit();


            }
        });

    }
}

关于fragmentActivity.setArguments(bundle); 用bundle的这个方法传递参数
参考:
https://www.jianshu.com/p/c06efe090589
大致就是防止Fragment重新创建参数不见了

//2.(创建)获取Fragment管理器
// FragmentManager fragmentManager = getFragmentManager();

2.(创建)获取Fragment管理器 重点重点重点

            // FragmentManager fragmentManager = getFragmentManager();
            FragmentManager fragmentManager = getSupportFragmentManager();                

我注释掉的部分请注意 即getFragmentManager()和getSupportFragmentManager()区别
参考:https://blog.csdn.net/u010568885/article/details/104038773
我们来仔细研究下这个坑
image
image

看到了妈
androidx

import androidx.fragment.app.FragmentManager;
import androidt.app.FragmentManager;
包是不一样的  现在已经都是androidx了整合了  
就像之前Recyclerlist一样

效果如图:
image


那总结一下吧:
在Activity中动态加载Fragment

1.首先要在layout中加入Fragment
2.创建Fragment对象 可以是自己写的继承extents Fragment
3.获取Fragment管理器
4.开启FragmentTransaction事务
5.向FrameLayout中添加Fragment 自己创建的
6.提交事务

标签:androidx,Fragment,19.14,Activity,import,FragmentManager,Android,fragmentManager
From: https://www.cnblogs.com/gaodiyuanjin/p/18118543

相关文章

  • android 【存储相关】preserveLegacyExternalStorage,requestLegacyExternalStorage
    这两个属性是与Android10(API级别29)及更高版本中的外部存储访问权限限制相关的属性。android:preserveLegacyExternalStorage="true"这个属性用于在Android10及更高版本上保留旧版的外部存储访问模式。在Android10及更高版本中,默认情况下,应用程序只能访问自己......
  • Android Graphics 多屏同显/异显 - C++示例程序(标准版)
    ”为了理解Android多屏同显/异显的基本原理,我们将从NativeLevel入手,基于GraphicsAPIs写作一个简单的C++版本的多屏显示互动的演示程序。通过这个程序我们将了解常用的多屏显示相关的接口的使用方法。“  01多屏显示C++示例概况 源码下载请查看文章末尾源码下载方......
  • MPAndroidChart setLabelRotationAngle bug
    MPAndroidChartsetLabelRotationAnglebug(应该包括其他关于修改x/ylabel的bug)库是好库,但就是不更新了。。bug描述:修改labelRotationAngle(setLabelRotationAngle()),手势缩放一下视图,才触发自动调整视图,会导致图表大小发生变化。用起来就是,第一次显示,label被截断,必须手动缩放一......
  • AndroidStudio学习记录(3):操纵按钮控件Botton、ImageBotton
    按钮控件是平时看到的,常用Botton和ImageButton控件,一般操纵按钮来实现相应的命令,比如在手机上的查找登录注册,以及点击命令等等。ImaBotton与Button的区别在于它没有文本,只有图片,需要制定图片路径在activity_main.xml文件中,它们是这样使用的:<?xmlversion="1.0"encoding=......
  • 使用Android完成案例教学
    目录题目:完成在Android平台下2个玩家分别利用2个手机连接在同一局域网下通过滑动摇杆分别使红飞机和黄飞机移动的开发。(全代码解析)题目:完成在Android平台下2个玩家分别利用2个手机连接在同一局域网下通过滑动摇杆分别使红飞机和黄飞机移动的开发。(全代码解析)用一个真机......
  • 2.1Activity简单使用
    了解Activity的生命周期和启动模式也是十分有必要的 怎么用上ViewBinding?替代findViewByIdActivity中按键绑定和Toast的使用Intent的使用,Activity跳转,传递数据等  ......
  • 1Android开始,让工程跑起来
    1、怎么让项目能运行?修改Setting使用国内源在KotlinDSL(.kts 文件)中,配置Maven仓库的方式与GroovyDSL略有不同。在KotlinDSL中应该这样写:1repositories{2maven{url=uri("https://maven.aliyun.com/repository/public/")}3} ......
  • Android NDK之使用 arm-v7a 汇编实现两数之和
    AndroidNDK之使用arm-v7a汇编实现两数之和关键词:NDKarmv7aWebRTCarm汇编CMake最近适配对讲程序,在webrtc的库编译的过程中,发现其为arm的平台定制了汇编程序以优化平方根倒数算法速度,上次写汇编还是8086的,借此机会初步尝试下android上arm汇编具体jni工程建立就不介绍了,An......
  • Android 14.0 添加自定义服务,并生成jar给第三方app调用
    1.概述在14.0系统ROM产品定制化开发中,由于需要新增加自定义的功能,所以要增加自定义服务,而app上层通过调用自定义服务,来调用相应的功能,所以系统需要先生成jar,然后生成jar给上层app调用,接下来就来分析实现的步骤,然后来实现相关的功能从而来实现所需要的功能2.关于添加系统......
  • Android 连接数据库
    1.添加新用户。   2.在libs中导入mysql的jar包。 3.修改AndroidManifest.xml,代码如下。1<?xmlversion="1.0"encoding="utf-8"?>2<manifestxmlns:android="http://schemas.android.com/apk/res/android"3xmlns:tools=&......