Fork me on GitHub

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

 

posted @ 2015-11-20 23:05  smileNicky  阅读(1389)  评论(0编辑  收藏  举报