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();//提交事务
    }

}

相关推荐

  1. 11-鸿蒙4.0学习之页面之间参数传递

    2024-04-03 09:06:03       23 阅读
  2. androidReact Native之间传递参数

    2024-04-03 09:06:03       16 阅读
  3. Vue3如何实现组件之间数据传递

    2024-04-03 09:06:03       26 阅读

最近更新

  1. 原版Win7 本地离线安装.netframework 4.8

    2024-04-03 09:06:03       0 阅读
  2. MyEclipse tomcat debug 断点看不到变量值

    2024-04-03 09:06:03       0 阅读
  3. MAC 终端命令

    2024-04-03 09:06:03       0 阅读
  4. 2024年5月软考高项冲刺复习攻略,稳过!

    2024-04-03 09:06:03       0 阅读
  5. 树的遍历算法题总结(第二十六天)

    2024-04-03 09:06:03       0 阅读
  6. sqlalchemy expunge的简单使用

    2024-04-03 09:06:03       0 阅读

热门阅读

  1. 集创赛分析(图像处理部分)

    2024-04-03 09:06:03       6 阅读
  2. ActiViz中的图像处理vtkImageActor

    2024-04-03 09:06:03       6 阅读
  3. 设计模式面试题(一)

    2024-04-03 09:06:03       6 阅读
  4. 鸿蒙原生应用开发-网络管理Socket连接(二)

    2024-04-03 09:06:03       6 阅读
  5. Amazon API Gateway 配置自定义域名

    2024-04-03 09:06:03       5 阅读
  6. FPGA在深度学习领域的应用的优势

    2024-04-03 09:06:03       8 阅读
  7. 安装编译cpprest sdk

    2024-04-03 09:06:03       4 阅读
  8. SSH中私钥和公钥的使用

    2024-04-03 09:06:03       7 阅读
  9. Echart(多雷达图展示)

    2024-04-03 09:06:03       5 阅读
  10. openmmlab系列框架多GPU训练

    2024-04-03 09:06:03       5 阅读