Android系列之Fragment和Activity之间的数据通讯

举报
yd_273762914 发表于 2020/12/02 22:44:55 2020/12/02
【摘要】          Fragment是Android3.0之后才推出来的。可以用来做底部菜单,现在很多APP都有用到这个底部菜单。当然TabHost也可以用来做底部菜单,但是Fragment来做,动画效果这些可以做得更炫。         Fragment和Activity之间是可以相互进行参数传送这些。但是Fragment不可以直接就将数据传送到另外一个Fragment,而...

         Fragment是Android3.0之后才推出来的。可以用来做底部菜单,现在很多APP都有用到这个底部菜单。当然TabHost也可以用来做底部菜单,但是Fragment来做,动画效果这些可以做得更炫。

        Fragment和Activity之间是可以相互进行参数传送这些。但是Fragment不可以直接就将数据传送到另外一个Fragment,而是借助Activity,先传到Activity,如何再通过Activity传到Fragment。  所以实现Fragment和Activity之间的数据传送是很关键的。

       (1)先创建一个Interface接口IBnCallListener,用来实现两者之间的数据传送。

 


  
  1. package com.util;
  2. /**
  3. * 传送Fragment和FragmentActivity之间的控件交互信息
  4. *
  5. */
  6. public interface IBtnCallListener {
  7. public void transfermsg();
  8. }


 

 

 

(2)创建Activity类实现IbtnCallListener接口,重载onAttachFragment(Fragment fragment)方法和transfermsg()方法,然后transfermsg()方法就根据自己项目需要去调用了

 


  
  1. package com.activity;
  2. /**
  3. *
  4. *主界面类
  5. *fragment是3.0以后的东西,为了在低版本中使用fragment就要用到android-support-v4.jar兼容包,
  6. *而fragmentActivity就是这个兼容包里面的,它提供了操作fragment的一些方法,其功能跟3.0及以后的版本的Activity的功能一样。
  7. */
  8. public class MainActivity extends FragmentActivity implements IBtnCallListener{
  9. //RadioButton
  10. private RadioButton radioBtn;
  11. private Intent intent;
  12. private Bundle bundle;
  13. private IBtnCallListener mBtnCallListener;
  14. private Bundle sendBundle;
  15. private MyFragment mFragment;
  16. FragmentTransaction ft;
  17. @Override
  18. protected void onCreate(Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. //设置无标题
  21. requestWindowFeature(Window.FEATURE_NO_TITLE);
  22. setContentView(R.layout.main);
  23. }
  24. ...
  25. @Override
  26. public void onAttachFragment(Fragment fragment) {
  27. try {
  28. mBtnCallListener=(IBtnCallListener) fragment;
  29. } catch (Exception e) {
  30. }
  31. super.onAttachFragment(fragment);
  32. }
  33. @Override
  34. public void transfermsg() {
  35. radioBtn.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.tab_found_pressed_icon, 0, 0);
  36. radioBtn.setTextColor(mFound.getResources().getColor(R.color.topbar_bg));
  37. if(mFoundFragment == null){
  38. //关键代码,肯定要这三句代码的,其它的根据自己的项目需要
  39. mFragment = new MyFragment();
  40. sendBundle = new Bundle();
  41. sendBundle.putString("test", "Android");
  42. //transfermsg();
  43. mFragment.setArguments(sendBundle);
  44. ft.add(R.id.fg_content,mFragment);
  45. }
  46. ft.show(mFoundFragment);
  47. ft.commit();
  48. }
  49. }


 

 

 

 

 

 

 

 

 

 

     (3)Fragment类实现IBtnCallListener接口类


  
  1. /**
  2. * MyFragMent类
  3. */
  4. public class MyFragment extends Fragment implements IBtnCallListener{
  5. private Bundle bundle;
  6. IBtnCallListener mbtnListener;
  7. private String test;
  8. //@Nullable
  9. @Override
  10. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  11. view = inflater.inflate(R.layout.found,container,false);
  12. transfermsg();
  13. return view;
  14. }
  15. }
  16. @Override
  17. public void onActivityCreated(Bundle savedInstanceState) {
  18. super.onActivityCreated(savedInstanceState);
  19. }
  20. @Override
  21. public void onAttach(Activity activity) {
  22. try {
  23. mbtnListener=(IBtnCallListener) activity;
  24. } catch (Exception e) {
  25. // TODO: handle exception
  26. throw new ClassCastException(activity.toString() + "must implement mbtnListener");
  27. }
  28. super.onAttach(activity);
  29. }
  30. @Override
  31. public void transfermsg() {
  32. bundle = getArguments();
  33. test = bundle.getString("test");
  34. System.out.println("由Activity传输过来的信息");
  35. Toast.makeText(getActivity(), test, 1000).show();
  36. }
  37. }

 



文章来源: smilenicky.blog.csdn.net,作者:smileNicky,版权归原作者所有,如需转载,请联系作者。

原文链接:smilenicky.blog.csdn.net/article/details/49942797

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。