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

举报
yd_273762914 发表于 2020/12/02 22:44:55 2020/12/02
4.6k+ 0 0
【摘要】          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,用来实现两者之间的数据传送。


      package com.util;
      /**
       * 传送Fragment和FragmentActivity之间的控件交互信息
       *
       */
      public interface IBtnCallListener {
     	public void transfermsg();
      }
  
 


 

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


      package com.activity;
      /**
       *
       *主界面类
       *fragment是3.0以后的东西,为了在低版本中使用fragment就要用到android-support-v4.jar兼容包,
       *而fragmentActivity就是这个兼容包里面的,它提供了操作fragment的一些方法,其功能跟3.0及以后的版本的Activity的功能一样。
       */
      public class MainActivity extends FragmentActivity implements IBtnCallListener{
     		//RadioButton
      private RadioButton radioBtn;
      private Intent intent;
      private Bundle bundle;
      private IBtnCallListener mBtnCallListener;
      private Bundle sendBundle;
      private MyFragment mFragment;
       FragmentTransaction ft;
      @Override
      protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      //设置无标题
       requestWindowFeature(Window.FEATURE_NO_TITLE);
       setContentView(R.layout.main);
       }
       ...
      @Override
      public void onAttachFragment(Fragment fragment) {
      try {
       mBtnCallListener=(IBtnCallListener) fragment;
       } catch (Exception e) {
       }
      super.onAttachFragment(fragment);
       }
      @Override
      public void transfermsg() {
      		radioBtn.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.tab_found_pressed_icon, 0, 0);
       radioBtn.setTextColor(mFound.getResources().getColor(R.color.topbar_bg));
      if(mFoundFragment == null){
      //关键代码,肯定要这三句代码的,其它的根据自己的项目需要
      			mFragment  = new MyFragment();
      			sendBundle = new Bundle();
      			sendBundle.putString("test", "Android");
      //transfermsg();
       mFragment.setArguments(sendBundle);
       ft.add(R.id.fg_content,mFragment);
       }
       ft.show(mFoundFragment);
       ft.commit();
      	}
      }
  
 


 

 

     (3)Fragment类实现IBtnCallListener接口类


      /**
       * MyFragMent类
       */
      public class MyFragment extends Fragment implements IBtnCallListener{
     	private Bundle bundle;
      	IBtnCallListener mbtnListener;
     	private String test;
      //@Nullable
      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       view = inflater.inflate(R.layout.found,container,false);
       transfermsg();
      return view;
       }
       }
        @Override
      public void onActivityCreated(Bundle savedInstanceState) {
      super.onActivityCreated(savedInstanceState);
       }
      @Override
      public void onAttach(Activity activity) {
      try {
       mbtnListener=(IBtnCallListener) activity;
       } catch (Exception e) {
      // TODO: handle exception 
      throw new ClassCastException(activity.toString() + "must implement mbtnListener");
       }
      super.onAttach(activity);
       }
     	@Override
     	public void transfermsg() {
      		bundle = getArguments();
       test = bundle.getString("test");
      		System.out.println("由Activity传输过来的信息");
      		Toast.makeText(getActivity(), test, 1000).show();
      	}
      }
  
 



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

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

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

作者其他文章

评论(0

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

    全部回复

    上滑加载中

    设置昵称

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

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

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