Fragment与Activity通信

本文介绍了一个简单的Android应用案例,包括Activity如何向Fragment发送数据,并通过EditText和Button实现;同时,也展示了Fragment如何通过定义接口回调机制将数据返回给Activity。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.前提

以一个动态加载为例,可以参考加载Fragment

2.Activity向Fragment发送数据:

基本思路:主页面的布局是一个EditText和一个Button,当点击Button时将EditText的数据发送给Fragment(用Bundle发送),Fragment里只有一个TextView,用于显示数据,同时把Fagment镶嵌在主布局中。
先看主界面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"
    android:orientation="vertical" 
    android:id="@+id/layout">

    <EditText 
        android:id="@+id/edt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />
    <Button 
        android:id="@+id/btn_send"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Send To Fragment"
        />
</LinearLayout>

MainActivity.java:

public class MainActivity extends Activity{

    private EditText edt;
    private Button btn_send;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edt = (EditText)findViewById(R.id.edt);
        btn_send = (Button)findViewById(R.id.btn_send);

        btn_send.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                String data = edt.getText().toString();
                MyFragment mf = new MyFragment();
                Bundle bundle = new Bundle();
                bundle.putString("data", data);
                mf.setArguments(bundle);
                FragmentManager fm = getFragmentManager();
                FragmentTransaction ft = fm.beginTransaction();
                ft.add(R.id.layout, mf, "mf");
                ft.commit();
            }
        });
    }
}

MyFragment.java:

public class MyFragment extends Fragment{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment, container,false);
        TextView txt = (TextView)view.findViewById(R.id.txt);
        String data = getArguments().getString("data")+"";
        txt.setText(data);
        return view;
    }
}

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_height="match_parent"
    android:orientation="vertical" >

    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/txt"
        />
</LinearLayout>

运行结果:
1
点击按钮后:
2

3.Fragment向Activity发送数据:

思路:在Fragment中声明一个接口,在MainActivity中实现函数。
MyFragment.java:

public class MyFragment extends Fragment{

    String back = "回复Activity的信息";
    MyListener listener;
    public interface MyListener{
        public void sendBack(String data);
    }
    @Override
    public void onAttach(Activity activity) {
        listener = (MyListener)activity;
        super.onAttach(activity);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment, container,false);
        TextView txt = (TextView)view.findViewById(R.id.txt);
        String data = getArguments().getString("data")+"";
        txt.setText(data);
        listener.sendBack(back);//将信息发送回去
        return view;
    }
}

MainActivity.java:

@Override
    public void sendBack(String data) {
        Toast.makeText(getApplicationContext(), data, Toast.LENGTH_SHORT).show();
    }

运行结果:
3

内容概要:本文档为《400_IB Specification Vol 2-Release-2.0-Final-2025-07-31.pdf》,主要描述了InfiniBand架构2.0版本的物理层规范。文档详细规定了链路初始化、配置训练流程,包括但不限于传输序列(TS1、TS2、TS3)、链路去偏斜、波特率、前向纠错(FEC)支持、链路速度协商及扩展速度选项等。此外,还介绍了链路状态机的不同状态(如禁用、轮询、配置等),以及各状态下应遵循的规则和命令。针对不同数据速率(从SDR到XDR)的链路格式化规则也有详细说明,确保数据包格式和控制符号在多条物理通道上的一致性和正确性。文档还涵盖了链路性能监控和错误检测机制。 适用人群:适用于从事网络硬件设计、开发及维护的技术人员,尤其是那些需要深入了解InfiniBand物理层细节的专业人士。 使用场景及目标:① 设计和实现支持多种数据速率和编码方式的InfiniBand设备;② 开发链路初始化和训练算法,确保链路两端设备能够正确配置并优化通信质量;③ 实现链路性能监控和错误检测,提高系统的可靠性和稳定性。 其他说明:本文档属于InfiniBand贸易协会所有,为专有信息,仅供内部参考和技术交流使用。文档内容详尽,对于理解和实施InfiniBand接口具有重要指导意义。读者应结合相关背景资料进行学习,以确保正确理解和应用规范中的各项技术要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值