首页 > 其他分享 >Android开发 - DetailFragment 类解析

Android开发 - DetailFragment 类解析

时间:2024-08-03 20:17:34浏览次数:14  
标签:container fragment DetailFragment Bundle import Android 解析 android

DetailFragment是什么

  • DetailFragment 专门用于显示详细信息。当用户在主界面(例如一个列表)中选择某个项时,应用会使用 DetailFragment 显示该项的详细信息。它通常与主界面的 Fragment 协同工作,形成一个主从结构(Master-Detail)

使用场景

  • 新闻应用

    • 主界面显示新闻列表DetailFragment 显示选中的新闻详细内容
  • 电子商务应用

    • 主界面显示商品列表DetailFragment 显示选中商品的详细信息和购买选项
  • 联系人应用

    • 主界面显示联系人列表DetailFragment 显示选中联系人的详细资料

工作步骤

  1. 创建 DetailFragment 类

    • 继承自 Fragment 类,并重写 onCreateView 方法来定义其 UI
  2. 定义布局文件

    • DetailFragment 创建一个 XML 布局文件,用于定义其界面元素
  3. 在 Activity 中加载 DetailFragment

    • 主 Activity 中,通过 FragmentTransactionDetailFragment 加载到指定的容器中。

代码步骤解析

  1. 创建一个名为 activity_main.xml主布局文件,用于定义主 Activity 的界面

    <?xml version="1.0" encoding="utf-8"?>
    <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" />
    
  2. 创建一个名为 fragment_detail.xml布局文件,用于定义 DetailFragment 的界面

    <?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">
    
        <!-- 显示详细信息的 TextView -->
        <TextView
            android:id="@+id/detail_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="详细信息"
            android:textSize="18sp" />
    </LinearLayout>
    
  3. 创建 DetailFragment 类

    // 导入必要的包
    import android.os.Bundle;
    import androidx.annotation.NonNull;
    import androidx.annotation.Nullable;
    import androidx.fragment.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    public class DetailFragment extends Fragment {
    
        // 重写 onCreateView 方法,创建 Fragment 的视图
        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            // 使用 inflater 将 fragment_detail.xml 布局文件转换成 View 对象
            return inflater.inflate(R.layout.fragment_detail, container, false);
        }
    }
    
  4. 启动类加载 DetailFragment

    // 导入必要的包
    import android.os.Bundle;
    import androidx.appcompat.app.AppCompatActivity;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main); // 设置主 Activity 的布局
    
            // 检查是否存在 fragment_container 布局容器
            if (findViewById(R.id.fragment_container) != null) {
                // 如果存在保存的实例状态,则不需要重新添加 Fragment
                if (savedInstanceState != null) {
                    return;
                }
    
                // 创建 DetailFragment 实例
                DetailFragment detailFragment = new DetailFragment();
    
                // 使用 FragmentTransaction 将 DetailFragment 添加到 fragment_container 中
                getSupportFragmentManager().beginTransaction()
                        .add(R.id.fragment_container, detailFragment).commit();
            }
        }
    }
    
  5. DetailFragment 类中添加与启动类通信的代码:为了让主界面与 DetailFragment 进行通信,通常会在主界面中实现一个接口,当用户选择某个项时,通过该接口信息传递给 DetailFragment

    import android.os.Bundle;
    import androidx.annotation.NonNull;
    import androidx.annotation.Nullable;
    import androidx.fragment.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    public class DetailFragment extends Fragment {
    
        private TextView detailTextView;
    
        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            // 将布局文件转换成 View 对象
            View view = inflater.inflate(R.layout.fragment_detail, container, false);
            
            // 获取 TextView 的引用
            detailTextView = view.findViewById(R.id.detail_text);
    
            // 获取传递过来的数据
            Bundle args = getArguments();
            if (args != null) {
                String detailText = args.getString("detail_text");
                detailTextView.setText(detailText);
            }
    
            return view;
        }
    
        // 用于设置详细信息的方法
        public void setDetailText(String text) {
            if (detailTextView != null) {
                detailTextView.setText(text);
            }
        }
    }
    
  6. 启动类中添加与 DetailFragment 类通信的代码

    // 导入必要的包
    import android.os.Bundle;
    import androidx.appcompat.app.AppCompatActivity;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main); // 设置主 Activity 的布局
    
            // 检查是否存在 fragment_container 布局容器
            if (findViewById(R.id.fragment_container) != null) {
                // 如果存在保存的实例状态,则不需要重新添加 Fragment
                if (savedInstanceState != null) {
                    return;
                }
    
                // 创建 DetailFragment 实例
                DetailFragment detailFragment = new DetailFragment();
    
                // 创建一个 Bundle 对象用于传递数据
                Bundle args = new Bundle();
                args.putString("detail_text", "这是传递给 DetailFragment 的详细信息");
                detailFragment.setArguments(args);
    
                // 使用 FragmentTransaction 将 DetailFragment 添加到 fragment_container 中
                getSupportFragmentManager().beginTransaction()
                        .add(R.id.fragment_container, detailFragment).commit();
            }
        }
    }
    
  • 以上成功创建和使用 DetailFragment并实现主界面与 DetailFragment 之间的数据传递。这种结构实现复杂应用程序非常有用,能够有效地将界面逻辑进行模块化和独立化

标签:container,fragment,DetailFragment,Bundle,import,Android,解析,android
From: https://www.cnblogs.com/ajunjava/p/18341005

相关文章

  • YOLOv8模型:从YAML文件到模型定义(代码逐行解析)
    鱼弦:公众号【红尘灯塔】,CSDN博客专家、内容合伙人、新星导师、全栈领域优质创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)YOLOv8模型:从YAML文件到模型定义(代码逐行解析)简介YOLOv8是目前最先进的目......
  • 洛谷 统计天数 + 语句解析 题解
    题目:P1567统计天数P1597语句解析第一道:P1567统计天数题目描述炎热的夏日,KC非常的不爽。他宁可忍受北极的寒冷,也不愿忍受厦门的夏天。最近,他开始研究天气的变化。他希望用研究的结果预测未来的天气。经历千辛万苦,他收集了连续 N(1≤N≤10^6)天的最高气温数据。现在......
  • react、vue组件编译区别&template解析原理
    react、vue组件打包编译为js时的区别1.react组件打包为js后,jsx会被编译为React.createElement.比如:antd的button.js(函数式组件直接returnjsx)constInternalButton=(props,ref)=>{//React.createElement第三个参数children一般兼容传数组和分开多个参数传递俩种形式......
  • iOS开发基础146-深入解析WKWebView
    WKWebView是苹果在iOS8中引入的重要组件,它替代了UIWebView,为开发者提供了高性能、高稳定性的网页显示和交互能力。在本文中,我们将深入探讨WKWebView的底层架构、关键特性、使用方法和高级功能。一、WKWebView的底层架构WKWebView基于WebKit框架,采用多进程架构,将页面渲染和JavaS......
  • android studio 2022配置加速
    当前版本AndroidStudioFlamingo|2022.2.1Build#AI-222.4459.24.2221.9862592,builtonMarch31,2023Runtimeversion:17.0.6+0-b2043.56-9586694amd64VM:OpenJDK64-BitServerVMbyJetBrainss.r.o.Windows1010.0GC:G1YoungGeneration,G1OldGeneratio......
  • Aspose.Slides.NET 19.2 解析ppt内容保存svg 保存ppt内部图片
    //LoadPowerPointpresentationPresentationpresentation=newPresentation("D:\\work\\code\\demo\\WPFPPT\\test.ppt");varslide=presentation.Slides[3];//SaveslideasSVGvarstream=newFileStream(@"D:\图像{0}.svg",......
  • 曲线取经Android SDK
    本文已经失效了,现在可以很快地从AndroidStudio下载所需的SDK。目前保留本文,以备不时之需。上下文在装AndroidStudio时,或者说无论干啥,想开发Android就需要AndroidSDK。有人说可以直接用什么镜像作为代理,但没用。所以,我突然想到我本来就有AndroidSDK,是安装VisualStudio时顺带......
  • Java中使用通配符的限制与使用案例解析
    UML类图如下Person类Student类Teacher类Grade类packagecom.itheima.demo;importjava.util.ArrayList;importjava.util.Collections;publicclassGrade{ privateArrayList<Teacher>teacherList=newArrayList<>(); privateArrayList<Student......
  • DeepViT 论文与代码解析
    paper:DeepViT:TowardsDeeperVisionTransformerofficialimplementation:https://github.com/zhoudaquan/dvit_repo出发点尽管浅层ViTs在视觉任务中表现优异,但随着网络深度增加,性能提升变得困难。研究发现,这种性能饱和的主要原因是注意力崩溃问题,即在深层变压器中,attentio......
  • Android开发 - (适配器)ArrayObjectAdapter类与Presenter实现类关联的作用解析
    ListRowPresenterArrayObjectAdapteradapter=newArrayObjectAdapter(newListRowPresenter());用途:用于展示ListRow中的水平滚动列表项ImageCardViewPresenterArrayObjectAdapteradapter=newArrayObjectAdapter(newImageCardViewPresenter());用途:用于显示带......