二十六、从acticity发送信息到FragMnet
一、使用 Bundle 对象进行传递
1. activity 段中的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @Override public void onClick(View view) { switch (view.getId()){ case R.id.btn: Bundle bundle = new Bundle(); bundle.putString( "message" , "使用Bundle传递" ); BlankFragment1 bf = new BlankFragment1(); bf.setArguments(bundle); replaceFragment(bf); break ; case R.id.btn2: replaceFragment( new ItemFragment()); break ; } } |
2. FragMent中的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 | @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); Bundle bundle = this .getArguments(); String str = bundle.getString( "message" ); Log.e( "TAG" , "onCreate: " + str); if (getArguments() != null ) { mParam1 = getArguments().getString(ARG_PARAM1); mParam2 = getArguments().getString(ARG_PARAM2); } } |
二、Java语言中类与类字迹通信常用方案:接口
1. 创建接口
1 2 3 4 5 6 | package com.example.dongtaifragment; public interface IfragmentCallback { void sendMsgToActivity(String string); String getMsgFromActivity(String msg); } |
2. 页面代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?xml version= "1.0" encoding= "utf-8" ?> <FrameLayout xmlns:android= "http://schemas.android.com/apk/res/android" xmlns:tools= "http://schemas.android.com/tools" android:layout_width= "match_parent" android:layout_height= "match_parent" android:orientation= "vertical" tools:context= ".BlankFragment1" > <!-- TODO: Update blank fragment layout --> <TextView android:layout_width= "match_parent" android:layout_height= "match_parent" android:text= "@string/hello_blank_fragment" /> <Button android:layout_marginTop= "100dp" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:id= "@+id/btn_3" android:text= "数据传递ToActivity" /> <Button android:layout_marginTop= "200dp" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:id= "@+id/btn_4" android:text= "数据传递FromActivity" /> </FrameLayout> |
3. activity 段中的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | package com.example.dongtaifragment; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import android.os.Binder; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; //动态添加 fragment public class MainActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn = findViewById(R.id.btn); btn.setOnClickListener( this ); Button btn2 = findViewById(R.id.btn2); btn2.setOnClickListener( this ); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.btn: Bundle bundle = new Bundle(); bundle.putString( "message" , "使用Bundle传递" ); BlankFragment1 bf = new BlankFragment1(); bf.setArguments(bundle); bf.setifragmentCallback( new IfragmentCallback() { @Override public void sendMsgToActivity(String string) { Toast.makeText(MainActivity. this ,string,Toast.LENGTH_SHORT).show(); } @Override public String getMsgFromActivity(String msg) { String msgs = msg; if (msg == "null" ){ msgs = "Hellow,调用了MainActivity的方法 " ; } return msgs; } }); replaceFragment(bf); break ; case R.id.btn2: replaceFragment( new ItemFragment()); break ; } } //同台切换Fragment private void replaceFragment(Fragment fragment){ FragmentManager fragmentManager = getSupportFragmentManager(); //创建一个事件 FragmentTransaction transaction = fragmentManager.beginTransaction(); //替换一个 transaction.replace(R.id.framelayouts,fragment); //将fragment添加到站中,当点击手机返回时,会返回到上一个的页面, //以值持续到回到最开始的页面,然后返回桌面 transaction.addToBackStack( null ); //提交 transaction.commit(); } } |
4. FragMent中的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | package com.example.dongtaifragment; import android.os.Bundle; import androidx.fragment.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.Toast; import java.net.IDN; public class BlankFragment1 extends Fragment { private View views; private IfragmentCallback ifragmentCallback; public void setifragmentCallback( IfragmentCallback callbanck){ ifragmentCallback = callbanck; } @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); Bundle bundle = this .getArguments(); String str = bundle.getString( "message" ); Log.e( "TAG" , "onCreate: " + str); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (views== null ){ views = inflater.inflate(R.layout.fragment_blank1, container, false ); } Button btn=views.findViewById(R.id.btn_3); btn.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { ifragmentCallback.sendMsgToActivity( "Hellow,调用了BlankFragment1的方法 " ); } }); Button btn2=views.findViewById(R.id.btn_4); btn2.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { String msg = ifragmentCallback.getMsgFromActivity( "null" ); Toast.makeText(BlankFragment1. this .getContext(),msg,Toast.LENGTH_SHORT).show(); } }); return views; } @Override public void onResume() { super .onResume(); } } |
分类:
Android Studio
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现