Android+Fragment与Activity之间的信息传递——笔记4

通过Java的面向对象传递信息;

1、建立一个接口

复制代码
package com.example.fragment;

public interface ITFragm {
    void sendmsgToAct(String msg);

      default String  getmsgFromAct() {
        return null;
    }
}

2、写一个Fragment经行信息交流

复制代码
package com.example.fragment;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import androidx.fragment.app.Fragment;

/**
 * A simple {@link Fragment} subclass.
 * Use the  factory method to
 * create an instance of this fragment.
 */
public class BlankFragment2 extends Fragment {
    private  View root;
    public TextView tv;
    public Button btn1,btn;
    private ITFragm itFragm1;

    /**
     * 该函数是一个公共的void类型函数,
     * 名为setITFragm,接受一个参数itFragm2,
     * 其类型为ITFragm。
     * 函数的作用是将传入的itFragm2对象赋值给类中的itFragm1成员变量。
     * 为匿名内部类做准备
     * @param itFragm2
     */
    public void setITFragm(ITFragm itFragm2){
        itFragm1=itFragm2;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        if(root==null){
             root=inflater.inflate((R.layout.fragment_blank1),container, false);
        }
        tv=root.findViewById(R.id.tv);
        btn1=root.findViewById(R.id.btn1);
        btn1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                itFragm1.sendmsgToAct("你好,我是Frag");
                tv.setText("发送成功");//发送信息给Activity
            }
        });
        btn=root.findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                String msg= itFragm1.getmsgFromAct();
                tv.setText(msg);//接收到来自Activity的信息
            }
        });
        return root;
    }
}

3、主界面

复制代码
package com.example.fragment;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
  Button btn2,btn3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn2=findViewById(R.id.btn2);
        btn3=findViewById(R.id.btn3);
        btn2.setOnClickListener(this);
        btn3.setOnClickListener(this);
    }
    //fragment与Activity之间通过Bundle传递数据
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn2:
                Bundle bundle=new Bundle();
                bundle.putString("name","张三");
                BlankFragment1 f1=new BlankFragment1();
                f1.setArguments(bundle);
                replacefragment(f1);
                break
                ;
//btn3通过面向对象的思想传递数据
            case R.id.btn3:
                BlankFragment2 blankFragment2=new BlankFragment2();

               blankFragment2.setITFragm(new ITFragm(){


                   @Override
                   public void sendmsgToAct(String msg) {
                       Toast.makeText(MainActivity.this,msg,Toast.LENGTH_SHORT).show();
                   }//接收来自Fragment的信息

                   @Override
                   public String getmsgFromAct() {
                       return "你好,我是Activity";
                   }//发送信息给Fragment


               });
                replacefragment(blankFragment2);
                break;
        }
    }


    /**
     * 这个函数用于在Android开发中切换Fragment。
     * 它通过获取FragmentManager和FragmentTransaction对象,
     * 使用replace方法将当前的Fragment替换为新的BlankFragment1实例,并提交该事务。
     * @param v
     */
    public void replacefragment(Fragment v){
        FragmentManager fragmentManager=getSupportFragmentManager();
        FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.fragment1,v);//替换
        fragmentTransaction.addToBackStack(null);//添加到后退栈
        fragmentTransaction.commit();//提交事务
    }

}

相关推荐
Allen_LVyingbo18 分钟前
数智读书笔记系列035《未来医疗:医疗4.0引领第四次医疗产业变革》
人工智能·经验分享·笔记·健康医疗
岑梓铭26 分钟前
考研408《计算机组成原理》复习笔记,第三章(3)——多模块存储器
笔记·考研·408·计算机组成原理
菜菜why39 分钟前
MSPM0G3507学习笔记(一) 重置版:适配逐飞库的ti板环境配置
笔记·学习·电赛·嵌入式软件·mspm0
c7691 小时前
【文献笔记】Automatic Chain of Thought Prompting in Large Language Models
人工智能·笔记·语言模型·论文笔记
移动开发者1号2 小时前
使用 Android App Bundle 极致压缩应用体积
android·kotlin
移动开发者1号2 小时前
构建高可用线上性能监控体系:从原理到实战
android·kotlin
X_StarX2 小时前
【Unity笔记01】基于单例模式的简单UI框架
笔记·ui·unity·单例模式·游戏引擎·游戏开发·大学生
智者知已应修善业4 小时前
【51单片机用数码管显示流水灯的种类是按钮控制数码管加一和流水灯】2022-6-14
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
ii_best7 小时前
按键精灵支持安卓14、15系统,兼容64位环境开发辅助工具
android
美狐美颜sdk7 小时前
跨平台直播美颜SDK集成实录:Android/iOS如何适配贴纸功能
android·人工智能·ios·架构·音视频·美颜sdk·第三方美颜sdk