3.2 Fragment的用法与通信大全

【Android】Fragment与Activity间通信知识总结 就是在MainActivity进行动态注册时,把data通过构造方法传参的形式传给fragment,所以要对fragment类进行修改。我这里有两个碎片在MainActivity上放着,并且他们各自都有一个按钮和文本,按钮用来发送数据,文本用来接收显示数据。这样,当数据发生变化时,我们可以通过这个变量来调用对应的实现,以通知数据变化。是一个用于携带数据的键值对集合,它可以保存各种类型的数据,本身是一个实现了。接口的类,因此它可以被序列化以便在组件之间传递。方法则是在视图创建完成后调用的,使用。 阅读详情

点此进入:从零快速构建APP系列目录导图
点此进入:UI编程系列目录导图
点此进入:四大组件系列目录导图
点此进入:数据网络和线程系列目录导图

本节例程下载地址:WillFlowFragment

究竟要如何使用碎片才能充分地利用平板屏幕的空间呢?假如我们正在开发一个新闻应用,其中一个界面使用 ListView 展示了一组新闻的标题,当点击了其中一个标题,就打开另一个界面显示新闻的详细内容。如果是在手机中设计,我们可以将新闻标题列表放在一个活动中,将新闻的详细内容放在另一个活动中。

一、静态创建 Fragment

这是使用Fragment最简单的一种方式,把Fragment当成普通的控件,直接写在Activity的布局文件中就可以了。

静态创建 Fragment 的步骤:

1、继承Fragment,重写onCreateView决定Fragemnt的布局
2、在Activity中声明此Fragment,就当和普通的View一样

下面我们用一个例子来展示静态创建 Fragment 的过程。

新建一个左侧碎片布局 left_fragment.xml,代码如下所示:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="Button"
        android:layout_marginTop="96dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

这个布局非常简单,只放置了一个按钮,并让它水平居中显示。

然后新建右侧碎片布局 right_fragment.xml,代码如下所示:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fc6243"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:textColor="#4352fc"
        android:text="这个是右侧的Fragment"
        android:textSize="22sp"
        android:layout_marginTop="96dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:id="@+id/textView" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="236dp"
        android:layout_height="236dp"
        android:layout_marginTop="40dp"
        app:srcCompat="@drawable/willflow"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

可以看到,我们将这个布局的背景色设置成浅红色,并放置了一个 TextView 用于显示一段文本。

接着新建一个 LeftFragment 类,继承自 Fragment,然后在关键的生命周期方法中插入代码(就和在处理 Activity 时一样)。注意:创建 Fragment 时,必须重写 onCreateView() 回调方法来定义布局。事实上,这是唯一一个为使 Fragment 运行起来需要重写的回调方法。

LeftFragment的代码如下所示:
public class LeftFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.left_fragment, container, false);
        return view;
    }
}

这里仅仅是重写了 Fragment 的 onCreateView()方法,然后在这个方法中通过 LayoutInflater的 inflate()方法将刚才定义的 left_fragment 布局动态加载进来,整个方法再简单明不过了。

接着我们用同样的方法新建 RightFragment,代码如下:
public class RightFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.right_fragment, container, false);
        return view;
    }
}

基本上代码都是相同的,相信已经没有必要再做什么解释了。

接下来修改 activity_main.xml中的代码,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment
        android:id="@+id/left_fragment"
        android:name="com.wgh.willflowfragment.LeftFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1" />

    <fragment
        android:id="@+id/right_fragment"
        android:name="com.wgh.willflowfragment.RightFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1" />
</LinearLayout>

可以看到,我们使用了标签在布局中添加碎片,其中指定的大多数属性我们都是熟悉的,只不过这里还需要通过 android:name 属性来显式指明要添加的碎片类名,注意一定要将类的包名也加上。

编译运行看效果:

注意: 当通过 XML 布局文件的方式将 Fragment 添加进 Activity 时,Fragment 是不能被动态移除的。如果想要在用户交互的时候把 Fragment 切入与切出,必须在 Activity 启动后,再将 Fragment 添加进 Activity,我们接下来学习这种方法。

二、动态创建 Fragment

在刚才的例子当中,我们已经学会了在布局文件中添加Fragment的方法,不过Fragment真正的强大之处在于,它可以在程序运行时动态地添加到Activity当中。根据具体情况来动态地添加Fragment,我们就可以将程序界面定制得更加多样化。

新建 another_right_fragment.xml,代码如下所示:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffaa00"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="33dp"
        android:text="这个是另一个右侧的Fragment"
        android:textColor="#cb43fc"
        android:textSize="20sp" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="136dp"
        android:layout_height="136dp"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="24dp"
        android:src="@mipmap/ic_launcher" />

</RelativeLayout>

这个布局文件的代码和 right_fragment.xml 中的代码基本相同,只是将背景色改成了橘黄色,并将显示的文字改了改。

然后新建 AnotherRightFragment 作为另一个右侧碎片,代码如下所示:
public class AnotherRightFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.another_right_fragment, container, false);
        return view;
    }
}

代码同样非常简单,在 onCreateView() 方法中加载了刚刚创建的 another_right_fragment 布局。这样我们就准备好了另一个Fragment,接下来看一下如何将它动态地添加到活动当中。

修改 activity_main.xml,代码如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment
        android:id="@+id/left_fragment"
        android:name="com.wgh.willflowfragment.LeftFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1" />

    <FrameLayout
        android:id="@+id/right_layout"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1">

        <fragment
            android:id="@+id/right_fragment"
            android:name="com.wgh.willflowfragment.AnotherRightFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </FrameLayout>
</LinearLayout>

可以看到,现在将右侧Fragment放在了一个 FrameLayout 中,还记得这个布局吗?在之前我们学过,这是 Android 中最简单的一种布局,它没有任何的定位方式,所有的控件都会摆放在布局的左上角。由于这里仅需要在布局里放入一个Fragment ,因此非常适合使用 FrameLayout 帧布局。之后我们将在代码中替换 FrameLayout 里的内容,从而实现动态添加Fragment 的功能。

修改MainActivity 中的代码,如下所示:
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = (Button) findViewById(R.id.button_lf);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                AnotherRightFragment fragment = new AnotherRightFragment();
                FragmentManager fragmentManager = getFragmentManager();
                FragmentTransaction transaction = fragmentManager.beginTransaction();
                transaction.replace(R.id.right_layout, fragment);
                transaction.commit();
            }
        });
    }

可以看到,首先我们给左侧Fragment 中的按钮注册了一个点击事件,然后将动态添加Fragment 的逻辑都放在了点击事件里进行。

这样就完成了在活动中动态添加Fragment的功能,接下来运行看效果:

动态添加Fragment主要分为五步:
  1. 创建待添加的Fragment实例。
  2. 获取到 FragmentManager,在Activity中可以直接调用 getFragmentManager() 方法得到。
  3. 开启一个事务,通过调用 beginTransaction() 方法开启。
  4. 向容器内加入Fragment,一般使用 replace() 方法实现,需要传入容器的 id 和待添加的Fragment实例。
  5. 提交事务,调用 commit()方法来完成。

三、Fragment 的通信

1、与Activity通信

方法一:findViewById()

尽管 Fragment 是作为独立于 Activity 的对象实现,并且可在多个 Activity 内使用,但 Fragment 的给定实例会直接绑定到包含它的 Activity。

具体地说,Fragment 可以通过 getActivity() 访问 Activity 实例,并轻松地执行在 Activity 布局中查找视图等任务。

View listView = getActivity().findViewById(R.id.listView);

同样地,我们的 Activity 也可以使用 findFragmentById() 或 findFragmentByTag(),通过从 FragmentManager 获取对 Fragment 的引用来调用Fragment中的方法。例如:

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
方法二:创建对 Activity 的事件回调

在某些情况下,我们可能需要通过 Fragment 与 Activity 共享事件。执行此操作的一个好方法是,在Fragment内定义一个回调接口,并要求宿主 Activity 实现它。 当 Activity 通过该接口收到回调时,可以根据需要与布局中的其他片段共享这些信息。

例如,如果一个新闻应用的 Activity 有两个Fragment:一个用于显示文章列表(Fragment A),另一个用于显示文章(Fragment B)— 那么Fragment A 必须在列表项被选定后告知 Activity,以便它告知Fragment B 显示该文章。

在下面的例子中,OnArticleSelectedListener 接口在 FragmentA 内声明:

public static class FragmentA extends ListFragment {
    public interface OnArticleSelectedListener {
        public void onArticleSelected(Uri articleUri);
    }
}

然后,该Fragment的宿主 Activity 会实现 OnArticleSelectedListener 接口并替代 onArticleSelected(),将来自Fragment A 的事件通知Fragment B。为确保宿主 Activity 实现此接口,Fragment A 的 onAttach() 回调方法(系统在向 Activity 添加Fragment时调用的方法)会通过转换传递到 onAttach() 中的 Activity 来实例化 OnArticleSelectedListener 的实例:

public static class FragmentA extends ListFragment {
    OnArticleSelectedListener mListener;
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnArticleSelectedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener");
        }
    }
}

如果 Activity 未实现接口,则Fragment会引发 ClassCastException。实现时,mListener 成员会保留对 Activity 的 OnArticleSelectedListener 实现的引用,以便Fragment A 可以通过调用 OnArticleSelectedListener 接口定义的方法与 Activity 共享事件。例如,如果Fragment A 是ListFragment的一个扩展,则用户每次点击列表项时,系统都会调用片段中的 onListItemClick(),然后该方法会调用 onArticleSelected() 以与 Activity 共享事件:

    public static class FragmentA extends ListFragment {
        OnArticleSelectedListener mListener;
        @Override
        public void onListItemClick(ListView l, View v, int position, long id) {
            Uri noteUri = ContentUris.withAppendedId(ArticleColumns.CONTENT_URI, id);
            mListener.onArticleSelected(noteUri);
        }
    }

传递到 onListItemClick()的 id 参数是被点击项的行 ID,即 Activity(或其他片段)用来从应用的 ContentProvider获取文章的 ID。

2、与其它Fragment通信

为了重用 Fragment UI 组件,我们应该把每个 Fragment 都构建成完全自包含的、模块化的组件,即定义它们自己的布局与行为。一旦我们定义了这些可重用的 Fragment,我们就可以通过应用程序逻辑让它们关联到 Activity,以实现整体的复合 UI。

通常 Fragment 之间可能会需要交互,比如基于用户事件的内容变更。所有 Fragment 之间的交互应通过与之关联的 Activity 来完成,也就是说两个 Fragment 之间不应直接交互。

(1)定义接口

为了让 Fragment 与包含它的 Activity 进行交互,可以在 Fragment 类中定义一个接口,并在 Activity 中实现。该 Fragment 在它的 onAttach() 方法生命周期中获取该接口的实现,然后调用接口的方法,以便与 Activity 进行交互。

以下是 Fragment 与 Activity 交互的例子:
public class HeadlinesFragment extends ListFragment {
    OnHeadlineSelectedListener mCallback;

    // 容器 Activity 必须实现该接口
    public interface OnHeadlineSelectedListener {
        public void onArticleSelected(int position);
    }

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

        // 确认容器 Activity 已实现该回调接口。否则,抛出异常
        try {
            mCallback = (OnHeadlineSelectedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(
             activity.toString() + " 必须实现这个接口!");
        }
    }
}

现在 Fragment 可以通过调用 mCallback(OnHeadlineSelectedListener 接口的实例)的 onArticleSelected() 方法(也可以是其它方法)与 Activity 进行消息传递。

例如当用户点击列表条目时,Fragment 中的下面的方法将被调用:
    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        // 向宿主 Activity 传送事件
        mCallback.onArticleSelected(position);
    }

##### (2)实现接口
为了接收回调事件,宿主 Activity 必须实现在 Fragment 中定义的接口。

例如,下面的 Activity 实现了上面例子中的接口:

public static class MainActivity extends Activity implements HeadlinesFragment.OnHeadlineSelectedListener{
    public void onArticleSelected(int position) {
        // 在这里做点什么...
    }
}
(3)向 Fragment 传递消息

宿主 Activity 通过 findFragmentById() 获取Fragment 的实例,然后直接调用 Fragment 的 public 方法向 Fragment 传递消息。

例如,假设上面所示的 Activity 可能包含另一个 Fragment,该 Fragment 用于展示从上面的回调方法中返回的指定的数据。在这种情况下,Activity 可以把从回调方法中接收到的信息传递到这个展示数据的 Fragment。

public static class MainActivity extends Activity implements HeadlinesFragment.OnHeadlineSelectedListener{

    public void onArticleSelected(int position) {

        ArticleFragment articleFrag = (ArticleFragment) getSupportFragmentManager().findFragmentById(R.id.article_fragment);

        if (articleFrag != null) {
            articleFrag.updateArticleView(position);
        } else {
            ArticleFragment newFragment = new ArticleFragment();
            Bundle args = new Bundle();
            args.putInt(ArticleFragment.ARG_POSITION, position);
            newFragment.setArguments(args);

            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            transaction.replace(R.id.fragment_container, newFragment);
            transaction.addToBackStack(null);
            transaction.commit();
        }
    }
}

这里面涉及到了返回栈的概念,我们接下来给大家简单介绍下。

在碎片中模拟返回栈:

上面的代码中我们成功实现了向Activity中动态添加Fragment的功能,不过通过点击按钮添加了一个Fragment之后,这时按下 Back 键程序就会直接退出而不是返回。如果这里我
们想模仿类似于返回栈的效果,就需要将一个事务添加到返回栈中。修改 MainActivity 中的代码如下即可:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.button_lf);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                AnotherRightFragment fragment = new AnotherRightFragment();
                FragmentManager fragmentManager = getFragmentManager();
                FragmentTransaction transaction = fragmentManager.beginTransaction();
                transaction.replace(R.id.right_layout, fragment);
                transaction.addToBackStack(null);
                transaction.commit();
            }
        });
    }
添加返回栈后的效果:

点此进入:GitHub开源项目“爱阅”。“爱阅”专注于收集优质的文章、站点、教程,与大家共分享。下面是“爱阅”的效果图:


联系方式:

简书:WillFlow
优快云:WillFlow
微信公众号:WillFlow

微信公众号:WillFlow

Fragment的基本用法 一、Fragment 二、创建一个Fragment 1.静态加载Fragment (1)创建Fragment布局文件 left_fragment.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout 阅读详情

相关推荐

Fragment与activity之间的通信

Fragment与activity的两种通信方式 Fragment与activity之间有多种通信方式,今天我们主要说两种通信方式,直接在一个activity传值给Fragment的方法和Fragment直接调用Activity中的public方法 Fragment直接调用Activity中的public方法 activity传值给fragment,在这其中我们首先得使用Bundle方法,首...

qq_38842722的博客 4612

Intent的更多用法

修改FirstActivity中按钮的点击事件,代码如下所示: 在SecondActivity的中再添加一个category的声明,如下所示: 启动程序,发现成功跳转。使用隐式Intent,我们不仅可以启动自己程序内的活动,还可以启动其他程序的活动,这使得Android多个应用程序之间的功能共享成为了可能。比如说你的应用程序中需要展示一个网页,这时没有必要自己去实现一个浏览器( 事实上也不太可能),而是只需要调用系统的浏览器来打开这个网页就行了。修改FirstActivity中按钮点击事件的代码,如下所示

Massimo__JAVA的博客 292

Activity与Fragment之间的通信详解

当我们使用Fragment的时候会常常与其他的Fragment或者宿主Activity进行交互,今天我们就来讲讲Fragment和Activity之间如何进行通信。       一、 接口回调机制      在讲Fragment和Android通信之前,我们先看一个应用场景,现在有一个需求,在Activity中有一个Button,有个一TextView。现在业务要求是这样,点击Button,改

源码有毒的专栏 2246

盘一下 Fragment 间的五种通信方式

今年 Google I/O 上介绍了 Jetpack 近期的更新内容,其中包括 Fragment 新增的 Result API 。本文借机盘点一下 Fragment 各种常见的通信方式。 Fragment 间的通信可以借助以下几种方式实现: 1、EventBus 2、Activity(or Parent Fragment) 3、ViewModel 4、Result API 1 基于 EventBus 通信 EventBus的优缺点都很突出。优点是限制...

winskyan的专栏 4341

Fragment 与 Activity 之间的通信

一、前言 在 Fragment 的创建、替换与移除 我们已经讲了 Fragment 的静态添加和动态添加,今天我们来讲 Fragment 的生命周期 和 Fragment 与 Activity 之间的交互。 二、Fragment 的生命周期 和 Activity 一样,Fragment 也有自己的生命周期,并且和 Activity 的生命周期非常相似。具体如下图所示: 这里我们选择几个比较重要的状态来讲解一下: onAttach():当 Fragment 和 Activity 建立关联时调用; onCr

weixin_38478780的博客 1062

Android中Fragment与Activity的相互通信

Fragment向Activity通信:    实现Fragment向Activity通信的方法为在Fragment内部定义接口,在接口中定义要实现的方法,并在绑定的Activity中实现这个接口,在Fragment 的OnAttach方法中获得绑定的Activity对象,并将得到的Activity对象强制转化为接口对象,这样就可以在fragment中操作activity实现接口之后继承的方法,从

weixin_37809153的博客 1509

android面试:两个 Fragment 之间如何通信?

在 Android 开发中,Fragment 之间的通信是一个常见的需求。使用 EventBus 框架能够使 Fragment 之间的通信变得更加灵活和简洁。这种方式通常会引入额外的库,但可以减少耦合。是最推荐的做法,因为它们能够更好地管理生命周期,减少内存泄漏和错误。适用于简单的场合,但可能导致 Fragment 之间的紧密耦合。更现代的做法,适合使用 MVVM 模式,能有效解决生命周期问题。这种方式可以实现更松耦合的通信,并且能很好地适应生命周期变化。在 FragmentA 中定义接口和回调方法。

2401_86900375的博客 848

Fragment之间通信实例

http://blog.csdn.net/chivalrousman/article/details/51623122

fragment通信的几种方式(接口框架)

fragment通信是我们经常遇到问题,各种解决方案都有。 首先明确的重要点:谷歌官方建议两个fragment不要直接通信,会造成碎片耦合。 方案一:handler方案 方案二:广播 方案三:EventBus 方案四:普通接口 方案五:万能接口

HUandroid的博客 5720

Fragment之间的通信之万能接口

1、在fragment定义一个接口 2、Activity实现接口 3、将接口与fragment和acvtivity绑定暴露

攻克+86手机号Discord验证墙:从“无效”到“成功”的实战指南

本文提供了一份针对+86手机号在Discord注册时频繁遭遇“手机号无效”问题的实战解决指南。文章系统分析了问题根源,并分步详解了从打造纯净网络环境、尝试多种手机号格式(如+86前加0),到更换iOS等客户端设备的有效方法,旨在帮助用户成功完成Discord手机号验证。

mac99的博客 1119

Android-Fragment与Fragment通信

同一个Activity中不同Fragment之间传值: 方式1:调用getFragmentManager().findFragmentById()获取Fragment对象,然后调用其方法。 方式2:调用getFragmentManager().findFragmentById().getView().findViewById()根据id获取activity中的fragment对象,再获取f...

sun_lulu的博客 2001

后向投影算法(BPA)-SAR成像算法系列(二)

SAR成像算法:后向投影算法(BPA)原理介绍及实现步骤解析。

yjh_2019的博客 1万+

【Android】Fragment的基本用法、Fragment和活动间的通信、Fragment的生命周期、动态加载布局的技巧

Fragment的基本用法、Fragment和活动间的通信、Fragment的生命周期、Fragment的四种状态和回调、动态加载布局的技巧

摸鱼小小虫的博客 5986

【全开源】旅游系统源码(Uniapp+FastAdmin+ThinkPHP)

通过源码的灵活配置和定制开发,我们可以根据旅游企业的实际需求,快速构建出符合其业务特点的旅游系统。旅游系统源码,作为这一变革的基石,为旅游业的数字化转型提供了强有力的支撑。通过深入研究和应用旅游系统源码,我们能够构建出更加智能、便捷、个性化的旅游服务平台,满足游客日益增长的旅游需求。国际化发展:随着全球化的深入发展,旅游系统源码也将迎来国际化的发展机遇,为国内外游客提供更加便捷、高效的旅游服务。跨界融合:旅游系统源码将与更多领域进行跨界融合,如与交通、餐饮、购物等行业的结合,为游客提供更加丰富的旅游体验。

2401_84413757的博客 2153

链路聚合Eth-trunk以及华为交换机配置实例

链路聚合简介 以太网链路聚合Eth-Trunk简称链路聚合,它通过将多条以太网物理链路捆绑在一起成为一条逻辑链路,从而实现增加链路带宽的目的。同时,这些捆绑在一起的链路通过相互间的动态备份,可以有效地提高链路的可靠性。 目的: 随着网络规模不断扩大,用户对骨干链路的带宽和可靠性提出越来越高的要求。在传统技术中,常用更换高速率的接口板或更换支持高速率接口板的设备的方式来增加带宽,但这种方案需要付出高额的费用,而且不够灵活。 采用链路聚合技术可以在不进行硬件升级的条件下,通过将多个物理接口捆绑为一个逻辑接口

ChaseAug的博客 2万+

Fragment之间的通信

依我所见Fragment之间的通信一般说的是 1两个同级的Fragment之间 2Fragment里面嵌套另外一个Fragment 3Fragment与FragmentActivity之间的通信

Ataraxia的专栏 5897

【即插即用模块】注意力篇 | TGRS 2025 | MFA聚特征+HPDown保细节+HFF融层级,三大模块各司其职,性能翻倍!

本文介绍了MTMLNet网络中的三大核心模块:MFA(多阶段特征聚合)、HPDown(混合池化下采样)和HFF(分层特征融合)。MFA通过双尺度深度卷积和注意力机制增强特征提取能力;HPDown结合平均池化和最大池化,有效保留下采样过程中的特征信息;HFF采用三注意力机制实现自适应特征融合。这三个模块协同工作,在红外小目标检测与分割任务中取得了SOTA效果。实验表明,各模块在特征提取、信息保留和融合方面均优于传统方法,可灵活应用于各类视觉任务中。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 286

安卓APP_ Fragment(2)—— Activity与Fragment的通信

这里写目录标题三、Fragment管理事务生命周期相关状态保存四、Fragment通信与动画Fragment与Activity通信Fragment之间的通信Fragment专场动画 三、Fragment管理 事务 生命周期 相关状态保存 四、Fragment通信与动画 Fragment与Activity通信 Fragment之间的通信 Fragment专场动画 ...

华天朱 819

一步步教你使用 NVIDIA 推出的全新GPU加速求解器 cuOpt:解锁超高效率的求解体验

未完成

Linshaodan520的博客 869

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Fragment 用法总结(一)

Fragment 用法总结(一)Fragment有点类似View,一种增强版的View,不仅可以show、hide,而且有大量的生命周期方法,处理事件,更好的和Activity交互,在显示title和content的层级界面上有独特的优势,更好的兼容适应平板和手机。下面主要分三个部分讲解Fragment的创建及基本用法、生命周期和高级用法。本文主要参考官方文档并加入自己整理的内容。创建fragmen

带着键盘走江湖。。。 8217

OV9734 DATASHEET,完整规格书

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

Android:Fragment与Activity之间的通信方式简单介绍

FragmentFragment与Activity之间的通信方式1、什么是Fragment与Activity之间的通信方式?3、Activity 如何传递数据到 Fragment?3、Fragment 如何传递数据到 Activity参考 Fragment与Activity之间的通信方式 1、什么是Fragment与Activity之间的通信方式? 常进行Android原生开发的同学都知道,Activity与Fragment之间、Fragment与Fragment之间的交互都是常规操作,是为进行开发的常规技

JMW1407的博客 7037

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

安卓-Activity与Fragment之间的通信

安卓简单学习记录,fragment向activity传信息

half_m的博客 2993

Activity与Fragment之间通信的多种方式

前言 本文主要介绍Activity与Fragment之间通信,以及同属于一个Activity的Fragment之间的通信。主要的方式有 1、通过

qq_41818873的博客 8096
上一篇: 3.1 Fragment理论知识及其生命周期,看这一片就够了
下一篇: 4.1 BroadcastReceiver 使用方法大全
WillFlow
博客等级 码龄11年 61粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值