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

原创 2015年11月20日 09:51:09

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



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Activity与Fragment,以及Fragment与Fragment之间的数据通讯

Activity与Fragment,以及Fragment与Fragment之间的数据通讯

【cocos2d-x + Lua(2) C++和lua数据通讯之间的互调】

我们主要解决如下几个问题: 转载zi:http://www.cnblogs.com/zisou/p/cocos2dx-lua2.html 1,C++如何获取Lua里面的一个变量值? ...

安卓中view、activity、fragment之间的相互跳转

在我们项目中经常碰到activity与fragment互相跳转的问题,其中解决方法大约也就那么几种,我以其中一个案例说一下,我要从自定义view跳转到fragment,当然不能之间跳转了我跳转到fra...

安卓activity和fragment之间切换动作--左右滑动的效果

一开始我给activity定义了切换动作,不知道为什么效果一直没出来,切换动作都是安卓默认的。后来问了问别人,改了改终于好了,为什么我也不知道。但是如果大家遇到activity切换的问题的话,可以直接...

ANDROID安卓activity与fragment,activity之间互相传值(一)

其实一直以来想写一点东西,但是项目都很赶,很有什么时间,但是今天公司换好新地址了,所以比较有感触,就决定来写一些东西,比较一下开始。 先说一下activity之间为什么要传值,因为在我们开发的过程中...

安卓性能优化之Activity和Fragment通过onSaveInstanceState()保存和恢复数据

Activity和Fragment 都有自己的生命周期,而且很类似.Fragment比Activity多了onAttach()和onCreateView()这些方法.整体它们两者是一样的周期,都会经历...
  • stzy00
  • stzy00
  • 2015年03月03日 15:04
  • 1527

ANDROID安卓activity与fragment,activity之间互相传值(三)

这篇,主要写的是,fragment与fragment直接的互相传值,互相通信,fragment必须依赖于activty,而activity用来管理fragment是通过fragmentManager来...

安卓初学-Fragment之间交换数据

1、activity接收fragment信息:在Fragment中依靠接口来实现public class HeadlinesFragment extends ListFragment { On...
  • z226688
  • z226688
  • 2015年12月01日 11:07
  • 219
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:安卓Fragment和Activity之间的数据通讯
举报原因:
原因补充:

(最多只允许输入30个字)