关闭

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

标签: androidandroid 3.0
706人阅读 评论(0) 收藏 举报
分类:

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



1
0
查看评论

详解Fragment跟Activity之间的通信

大家好.Fragment现在越来越广泛了,中文翻译为碎片,下面我就就碎片代替了,当时谷歌出碎片的原因是因为Android设备屏幕大小不统一,碎片出来了.用一套APP就可以解决平板跟手机上的UI问题.对于新手让碎片跟Activity交互很困难,因为碎片是依附在Activity上面的,他们不是一个整体,...
  • u011310942
  • u011310942
  • 2014-07-21 14:17
  • 3170

Fragment和Activity通信以及Fragment之间通信的两种方式

Fragment之间通信很简单……这里只是提供思路,无论是Fragment和Activity还是Fragment之间,通信的原理都是如此,所以Fragment之间通信不能直接通信,必须依靠所依附的Activity。 可以通过getSupportFragmentManager()拿到FragmentM...
  • yalinfendou
  • yalinfendou
  • 2015-03-27 15:11
  • 4004

Android中Fragment和Activity之间的通信(含接口回调)

一、接口回调的简单引入: 我们先来看一个简单的接口回调的例子: 新建一个Java工程,然后新建一个包。然后新建一个A.java文件: A.java代码如下: 1 package com.cn.callback; 2 3 public class A { 4 publ...
  • IT_51888_liang
  • IT_51888_liang
  • 2016-03-25 00:22
  • 1214

关于Fragment与Fragment、Activity通信的四种方式

一直想总结一下Fragment与Fragment、Activity通信的问题,今天有时间一共总结了三种,权当抛砖引玉,如果大家还有更好的方式来实现Fragment和Fragment、Activity的通信,欢迎提出来,我们一起学习。好了,我们先来看看今天要实现的一个效果图:左边是一个Fragment...
  • u012702547
  • u012702547
  • 2015-11-11 22:48
  • 25168

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

在我们项目中经常碰到activity与fragment互相跳转的问题,其中解决方法大约也就那么几种,我以其中一个案例说一下,我要从自定义view跳转到fragment,当然不能之间跳转了我跳转到fragment所在的mainactivity里面 这时,我在MainActivity里面接收,...
  • u010859484
  • u010859484
  • 2016-09-18 16:54
  • 1742

Fragment与Activity的相互通信(一)

今天在做项目的时候,用到了平时再也熟悉不过的Fragment,其中涉及到了Activity与Fragment之间的通信,仔细探究发现没有那么容易,这里总结一下在自己项目中的应用。 参考博客: http://blog.csdn.net/lmj623565791/article/details/3...
  • tyk0910
  • tyk0910
  • 2015-12-25 23:01
  • 7348

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

Activity与Fragment,以及Fragment与Fragment之间的数据通讯
  • yangyin3096
  • yangyin3096
  • 2016-05-22 19:26
  • 907

android中fragment与activity之间通信原理以及例子

转自   http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1016/441.html 首先,如果你想在android3.0及以下版本使用fragment,你必须引用android-suppor...
  • guozh
  • guozh
  • 2014-05-08 17:45
  • 40060

android Activity和Fragment之间的数据传输的实现

Activity传递给Fragment的数据 可以附加argument给Fragment来实现,需要调用Fragment.setArguments(Bundle)方法。注意,该任务必须在Fragment创建后、添加给Activity前完成。 Fragment传递给Activity的数据,可以再Fr...
  • geekMer
  • geekMer
  • 2015-11-12 21:18
  • 2983

两个Activity中的Fragment之间的参数传递

这是我第一次写博客,也是在大神的指点下,因为看到大神都说菜鸟就要多写博客才可以成长,于是我鼓足勇气开始了。 Fragment和Activity 之间那些事。
  • qq_35164237
  • qq_35164237
  • 2017-01-12 21:35
  • 423
    个人资料
    • 访问:517214次
    • 积分:5535
    • 等级:
    • 排名:第5721名
    • 原创:125篇
    • 转载:7篇
    • 译文:6篇
    • 评论:258条
    About Me
    Turtles
    Clock
    博客专栏