【Android】使用FragmentManager動態添加片段

在這里插入圖片描述
三三要成為安卓糕手

上一篇文章,我們是在xml中靜態添加fragment,但是一些修改或者其他事情是做不了的;

本章我們達成在java代碼中靈活添加、刪除、替換fragment操作

一:核心代碼展示

簡單做一個這種頁面

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

public class FragmentActivity extends AppCompatActivity implements View.OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_fragment);findViewById(R.id.btn_add).setOnClickListener(this);findViewById(R.id.btn_remove).setOnClickListener(this);findViewById(R.id.btn_replace).setOnClickListener(this);}@Overridepublic void onClick(View v) {MyFragment myFragment = new MyFragment();//獲取管理器,開始事務FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();if(v.getId() == R.id.btn_add){//獲取管理器,開始事務fragmentTransaction.add(R.id.fcv, myFragment,"tag_myFragment");//提交事務fragmentTransaction.commit();} else if (v.getId() == R.id.btn_remove) {//方式二:id移除,優先用這個Fragment fragment = fragmentManager.findFragmentById(R.id.fcv);fragmentTransaction.remove(fragment);fragmentTransaction.commit();//方式一:直接移除
//            fragmentTransaction.remove(myFragment);//方式三:tag移除法
//            fragmentTransaction.remove(fragmentManager.findFragmentByTag("tag_myFragment"));} else if (v.getId() == R.id.btn_replace) {fragmentTransaction.replace(R.id.fcv,new BlueFragment(),"tag_BlueFragment");fragmentTransaction.commit();}}
}

1:三種移除方式

  • 直接移除new出來的fragment
  • id移除,通過FragmentContainer去移除,泛用性更好最推薦。理解成所有Fragment都會抵達的總站,在這里管理更方便
  • tag移除,這是Fragment的一個標簽

2:獲取管理器和開始事務

這兩行代碼盡量不要提取成方法成員變量,避免一些未知錯誤

        //獲取管理器,開始事務FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();fragmentTransaction.add(R.id.fcv, myFragment,"tag_myFragment");

在這段代碼中,通過 fragmentTransaction.add(R.id.fcv, myFragment, "tag_myFragment") 這行代碼,是將 myFragment 這個 Fragment 實例添加到了 idfcv 的容器,從而實現把 myFragment 對應的布局關聯到 R.id.fcv 這個容器里,讓 myFragment 的界面能夠在該容器所在的位置顯示出來。

一句話總結:把myFragment布局關聯到R.id_fcv這個FragmentContainer中

(1)getSupportFragmentManager()

自定義啟動類繼承AppCompatActivity;又繼承FragmentActivity

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

getSupportFragmentManager()是FragmentActivity中提供的方法在當前類中直接獲取Fragment管理器

(2)使用事務

開始事務

將當前某個Activity關聯控件當中

第一個參數,第二個參數:你要添加的是哪個Fragment,第三個參數:要添加的Fragment在FragmentManager當中的TAG是什么(性能更好)

3:效果

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

4:注意事項

每次處理完事務Transaction后記得要commit

二:替換的Fragment代碼展示

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

1:為什么更推薦用id移除

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

添加紅色,替換為藍色,移除掉藍色,就會出現bug;因為當前不是tag_myFragment了而是藍色view,那還移除個蛋

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/94144.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94144.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94144.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MiniOB環境部署開發(使用開源學堂)

整體思路: 1.使用開源學堂在線編程環境開發MiniOB編譯環境 2.使用vscode進行代碼調試和開發以及上傳到倉庫 MiniOB源碼:https://github.com/oceanbase/miniob MiniOB文檔:MiniOB 介紹 - MiniOB 數據庫大賽官網:OceanBase 社區…

09_常用內置模塊進階

第9課:常用內置模塊進階 課程目標 深入學習Python常用內置模塊掌握collections、itertools、functools等模塊學習json、csv、pickle等數據處理模塊 1. collections模塊 1.1 Counter類 from collections import Counter# 統計元素出現次數 text "hello world p…

? Ranger 基礎命令與功能詳解

📌 1. Ranger簡介 Ranger(游俠)是一款 Linux 專用的 指令式文件管理器,其操作風格類似 Vim,通過輸入指令即可完成目錄跳轉、文件編輯、移動、復制等操作。 相比于 mc(Midnight Commander)&…

CUDA安裝教程(包括cuDNN的教程)一個博客帶你了解所有問題

前言 windows10 版本安裝 CUDA ,首先需要下載兩個安裝包 CUDA toolkit(toolkit就是指工具包)cuDNN 注:cuDNN 是用于配置深度學習使用 官方教程 CUDA:Installation Guide Windows :: CUDA Toolkit Documentation …

ArkTS 語言全方位解析:鴻蒙生態開發新選擇

在鴻蒙生態蓬勃發展的當下,一款高效、健壯的開發語言成為開發者的迫切需求。ArkTS 語言應運而生,作為鴻蒙生態的核心應用開發語言,它在 TypeScript(簡稱 TS)基礎上進行創新擴展,為開發者打造高性能、易維護…

JavaScript性能優化實戰:從瓶頸識別到極致體驗

文章目錄JavaScript性能優化實戰:從瓶頸識別到極致體驗1. 引言:為什么JavaScript性能至關重要1.1 性能對用戶體驗的影響1.2 JavaScript性能瓶頸的多樣性2. JavaScript內存管理優化2.1 JavaScript內存模型詳解2.2 垃圾回收機制與優化策略2.3 內存分析實戰…

批量歸一化:不將參數上傳到中心服務器,那服務器怎么進行聚合?

聯邦批量歸一化(FedBN) 是一種聯邦學習客戶端本地模型優化算法。它的核心思想是:在聯邦學習的客戶端本地訓練過程中,保留并獨立更新批量歸一化層(Batch Normalization, BN)的參數,而不將這些參數…

Qt中使用MySQL數據庫

一、MySQL 入門 核心概念 在 QT 中操作數據庫,主要使用兩個模塊: QSqlDatabase:代表一個數據庫連接。 QSqlQuery:用于執行 SQL 語句(如 SELECT, INSERT, UPDATE, DELETE)并處理結果。 環境準備 在編寫代碼之前,你需要確保系統已具備以下條件: 1. 安裝 MySQL 從 M…

Android - 統一資源標識符 Uri

一、概念URI(Uniform Resource Identifier)統一資源標識符,用于標識資源的字符串(如圖片、網頁、文件、應用等)。1.1 與 URL 的區別URL(統一資源定位符)是 URI(統一資源標識符&#…

開源 AR 眼鏡怎么選?OpenGlass ,OSSG,cheApR 分析推薦

開源項目橫評(看完你會知道自己屬于哪一類) 1)OpenGlass:最低成本跑通“能用的AI眼鏡” 賣點:用不到$25的通用元件,把任意普通眼鏡改造成“可黑客化”的智能眼鏡;能錄制、識別、翻譯、記人等。…

RAGFlow (一) 開發環境搭建

本文介紹如何在Windows上進行RAGFlow開發環境搭建 一. 環境準備 前提條件 CPU ≥ 4 核內存 ≥ 16 GB磁盤 ≥ 50 GBDocker ≥ 24.0.0 & Docker Compose ≥ v2.26.1 安裝Docker Desktop為wsl安裝Ubuntu 1.啟用 WSL2??(Windows Subsystem for Linux&#xff09…

k8sday13數據存儲(1.5/2)

目錄 二、高級核心存儲 1、PV 1.1配置文件 ①、訪問模式(accessModes) ②、回收策略(persistentVolumeReclaimPolicy) ③、存儲類別 ④、狀態(Status) 1.2創建測試 ①、準備NFS環境 ②、創建PV …

【力扣 Hot100】每日一題

D15 魯迅曾說,盡量每天都讓自己充實一點,你可以刷一個小時的短視頻,打一個小時的王者榮耀,但盡量再留一個小時出來讀一下書、教程、博客,讓自己的大腦保持活躍,而不是垃圾場。如果真的沒有事情做&#xff…

Sql server的行轉列

業務場景:有如下一張表,希望匯總成下面的查詢結果。 原始數據表 EmployeeTable:一個員工身兼多個崗位。 Employee Role Level 張三 工程師 3 張三 經理 5 李四 工程師 2 李四 主管…

某市-2025【網安·論道】決賽-misc1-翻轉-wp

題目給了個圖片以及一句提示 “斯蒂xx會幫助你” 直接就能想到 ste 開頭的那幾個工具,但是我比賽時候電腦什么ste開頭的工具都沒裝,只能回來做了。 └─$ exiftool x.jpeg ExifTool Version Number : 13.00 File Name : …

[系統架構設計師]大數據架構設計理論與實踐(十九)

[系統架構設計師]大數據架構設計理論與實踐(十九) 一.傳統數據處理系統的問題 1.傳統數據庫的數據過載問題 傳統應用的數據系統架構設計時,應用直接訪問數據庫系統。當用戶訪問量增加時,數據庫無 法支撐日益增長的用戶請求的負載&…

UniAD

1. 算法動機及開創性思路 1)UniAD算法簡介 算法全稱:Planning-oriented Autonomous Driving核心特點: 統一框架整合感知、預測、規劃模塊CVPR 2023最佳論文采用查詢(query)方式連接各模塊 名稱含義: Unified:統一多模塊…

ESP-NOW詳解(esp-idf)

esp-now目前主要支持單播和廣播,廣播地址為ff:ff:ff:ff:ff:ff,廣播可以向范圍內所有擁有esp-now接收的設備發送數據 注意事項,網絡模式是可以設置網絡mac地址的,在單播中,目標設備網絡模式選擇為ap時,mac地址會發生改…

`strlen` 字符串長度函數

1) 函數的概念與用途 strlen 是 C 語言標準庫中最基礎且使用最頻繁的字符串處理函數之一,它的名字來源于"string length"(字符串長度)。這個函數的功能非常明確:計算一個以空字符結尾的字符串的長度。 可以將 strlen 想…

TorchInductor - Introduction

PyTorch 2.x通過TorchDynamo通過Python Bytecode的動態變換實現了圖捕獲功能,需要搭配一個Compiler Backend完成圖編譯。 Pytorch嘗試集成了多個后端,并使用一個輕量級的autotuner來選擇最優的后端圖編譯結果。這個解決方案存在2個問題: 這…