专栏首页Nicky's blog安卓Fragment和Activity之间的数据通讯

安卓Fragment和Activity之间的数据通讯

         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();
	}
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android6.0到9.0的适配爬坑总结

      大家还记得Android 6.0权限适配的泪水吗?而现在谷歌已经出了Android P的稳定版,而且谷歌粑粑,为了大家能给辛苦熬夜加班,特地的和个大市场合作...

    用户1269200
  • 安卓开发基础教程-Android多界面应用程序开发

    本套教程主要讲解安卓开发的相关知识,从基础到精通。一方面可以巩固自己所得,另一方面可以帮助对安卓开发感兴趣的朋友。

    做全栈攻城狮
  • 窃听风云:扒掉你的最后一条“胖次”

    “每个人的手机都是一部窃听器,不管你开不开机,都能被窃听。”在2009年上映的《窃听风云》中吴彦祖饰演的人物有这样一句台词,随着影片热映,“手机窃听”的问题被更...

    FB客服
  • 运行时权限

    我们在夸数据共享的时候,遇到危险的权限时候系统会让我们进行是否授权,只有我们授权了才能使用这些权限.比如拨号(可能引起收费的敏感权限)等,这里我们来演示一下调用...

    Dream城堡
  • LitePal操作数据库

    Dream城堡
  • 手把手带你快速上手调试Flutter项目

    在讲解调试工具之前,先来看看有关的设置选项,点击菜单栏File-->Settings-->Languages & Frameworks --> Flutter,...

    AWeiLoveAndroid
  • Android adb无线调试脚本

    使用adb的无线调试功能十分的方便。 但是实际工作中,总是要手动输入,十分麻烦。所以就把它写成脚本文件。

    deep_sadness
  • 程序员带你学习安卓开发系列-Android文件存储

    输入帐号密码,并勾选记住帐号 ,点击登录时,保存帐号信息。下次登陆可以直接显示上次保存的QQ帐号。

    做全栈攻城狮
  • 在Android上用AI识别物体

    AI其中一个很重要的应用就是物体识别。 今天我们来看看如何在Android上实现这个功能。

    PhoenixZheng
  • 用JWT技术解决IM系统Socket长连接的身份认证痛点1、引言2、原作者3、系列文章5、完全搞懂什么是JWT技术6、我们是怎样使用JWT技术的?7、JWT技术的缺点8、点评附录:更多即时通讯方面的文

    本文引用了封宇《JWT技术解决IM系统的认证痛点》一文的部分内容,即时通讯网重新整理、增补和修订,感谢原作者的无私分享。

    JackJiang

扫码关注云+社区

领取腾讯云代金券