zoukankan      html  css  js  c++  java
  • 安卓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();
        }
    }
    IT程序员
  • 相关阅读:
    献给即将27岁的我
    oracle导表小结
    [译]第三章:什么是组织结构
    第三章:什么是组织结构
    第二章:什么是组织
    [译]第二章:什么是组织
    第一章:什么是管理
    [译]第一章:什么是管理
    [原]DbHelper-SQL数据库访问助手
    DbHelper-SQL数据库访问助手
  • 原文地址:https://www.cnblogs.com/mzq123/p/4982569.html
Copyright © 2011-2022 走看看