Android 之Fragment

本文介绍Android应用开发中Fragment与Activity之间的消息传递方法。包括如何从Activity向Fragment发送数据,通过设置Bundle参数;以及从Fragment向Activity回传数据,采用定义内部回调接口的方式。

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

Android 之 Fragment(三)


Fragment与Activity的消息传递

1. 从Activity将消息传递到Fragment中:

在Activity中创建Bundle数据包,并调用Fragment的setArguments()方法

//Activity_main.java 中的onCreate()方法
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //在Activity中给Button设置事件监听
    findViewById(R.id.activity_main_btn).setOnClickListener(new OnClickListener() {
           @Override
           public void onClick(View v) {
            //获取编辑框的输入数据
               String text = ((EditText)findViewById(R.id.activity_main_et)).getText().toString();
               Fragment_main fragment = new Fragment_main(); //动态创建自己定义的Fragment_main的对象
               Bundle bundle = new Bundle(); //创建Bundle数据包对象
               bundle.putString("message", text); //向Bundle数据包中放入编辑框中的数据
               fragment.setArguments(bundle);//将数据传递给自定义的Fragment_main对象

              //获取系统的FragmentManager的FragmentTransaction事物
               FragmentTransaction beginTransaction = getFragmentManager().beginTransaction();

               beginTransaction.add(R.id.activity_main_layout, fragment, "fragment");//向事物中添加Fragment

               beginTransaction.commit();//向Activity提交事物
               Toast.makeText(Activity_main.this, "向Fragment发送" + text + " 消息", Toast.LENGTH_SHORT).show();
           }
       });
}



//Fragment_main.java中的onCreateView()方法
public View onCreateView(LayoutInflater inflater, ViewGroup conainer, Bundle savedInstanceState) {
    //解析Fragment的Layout文件
    View view = inflater.inflate(R.layout.fragment_main, conainer, false);
    //绑定Fragment的TextView控件
    textView = (TextView) view.findViewById(R.id.fragment_main_tv);

    //获取从Activity传递过来数据包中的数据
    String message = getArguments().get("message") + "";
    textView.setText(message); //设置到TextView上

    Toast.makeText(getActivity(), "收到来自Activity的消息:" + message, Toast.LENGTH_SHORT).show();
    return view;
}

2. 从Fragment将消息传递到Activity中:

在Fragment中定义一个内部回调接口,在让包含该Fragment的Activity实现该回调接口。这样Fragment可调用该回调方法将数据传递给Activity

public class Fragment_main extends Fragment {
    private TextView textView;
    private SendMessage sendMessage; //创建回调接口的对象
    private String code = "Fragment向Activity发送消息.....";

    //在Fragment中创建一个回调接口
    public interface SendMessage { 
        void send(String code);
    }

    @Override
    public void onAttach(Context context) {
        sendMessage  = (SendMessage) context; //实例化回调接口对象
        super.onAttach(context);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup conainer, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_main, conainer, false);

        textView = (TextView) view.findViewById(R.id.fragment_main_tv);
        String message = getArguments().get("message") + "";
        textView.setText(message);

        Toast.makeText(getActivity(), "收到来自Activity的消息:" + message, Toast.LENGTH_SHORT).show();

        Toast.makeText(getActivity(), code, Toast.LENGTH_SHORT).show();
        sendMessage.send(code); //向Activity传递数据
        return view;
    }
}

//让Activity_main实现Fragment_main中的回调接口
public class Activity_main extends Activity implements SendMessage{

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

        findViewById(R.id.activity_main_btn).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String text = ((EditText)findViewById(R.id.activity_main_et)).getText().toString();
                Fragment_main fragment = new Fragment_main();
                Bundle bundle = new Bundle();
                bundle.putString("message", text);
                fragment.setArguments(bundle);

                FragmentTransaction beginTransaction = getFragmentManager().beginTransaction();
                beginTransaction.add(R.id.activity_main_layout, fragment, "fragment");
                beginTransaction.commit();
                Toast.makeText(Activity_main.this, "向Fragment发送" + text + " 消息", Toast.LENGTH_SHORT).show();
            }
        });
    }

    //实现回调接口中的方法,直接获取数据
    public void send(String code) {
        Toast.makeText(this, "收到来自Fragment的消息:" + code, Toast.LENGTH_SHORT).show();
    }
}
基于Spring Boot搭建的一个多功能在线学习系统的实现细节。系统分为管理员和用户两个主要模块。管理员负责视频、文件和文章资料的管理以及系统运营维护;用户则可以进行视频播放、资料下载、参与学习论坛并享受个性化学习服务。文中重点探讨了文件下载的安全性和性能优化(如使用Resource对象避免内存溢出),积分排行榜的高效实现(采用Redis Sorted Set结构),敏感词过滤机制(利用DFA算法构建内存过滤树)以及视频播放的浏览器兼容性解决方案(通过FFmpeg调整MOOV原子位置)。此外,还提到了权限管理方面自定义动态加载器的应用,提高了系统的灵活性和易用性。 适合人群:对Spring Boot有一定了解,希望深入理解其实际应用的技术人员,尤其是从事在线教育平台开发的相关从业者。 使用场景及目标:适用于需要快速搭建稳定高效的在线学习平台的企业或团队。目标在于提供一套完整的解决方案,涵盖从资源管理到用户体验优化等多个方面,帮助开发者更好地理解和掌握Spring Boot框架的实际运用技巧。 其他说明:文中不仅提供了具体的代码示例和技术思路,还分享了许多实践经验教训,对于提高项目质量有着重要的指导意义。同时强调了安全性、性能优化等方面的重要性,确保系统能够应对大规模用户的并发访问需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值