zoukankan      html  css  js  c++  java
  • Android fragment之间消息传递

    1. 在Fragment里定义一个内部接口, 在Fragment初始化方法里, 把父Activity转换成这个接口, 赋值给成员变量

    public class DummyFragment extends ListFragment {
        SomeEventListener listener;
    
        public interface SomeEventListener {
            public void onSomeEvent(int arg);
        }
    
        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
    
            try {
                listener = (SomeEventListener) activity;
            } catch (ClassCastException e) {
                throw new ClassCastException(activity.toString()
                        + " must implement SomeEventListener ");
            }
        }
    
        ...
    }

    2. 父Activity必须实现这个接口

    public static class MainActivity extends Activity
        implements DummyFragment.SomeEventListener {
        ...
        
        public void onSomeEvent(int arg) {
            // 参数会被传进来, 然后在这里调用各个fragment的方法去传递消息
        }
    }

    3. 在Fragment的对应事件方法里, 调用接口通知父Activity

        @Override
        public void onListItemClick(ListView l, View v, int position, long id) {
            // Send the event to the host activity
            listener.onSomeEvent(position);
        }

    3. 父Activity里, 拿到各Fragment后, 在接口方法里调用对应的fragment方法

    public static class MainActivity extends Activity
        implements DummyFragment.SomeEventListener {
        ...
        
        public void onSomeEvent(int arg) {
            // 参数会被传进来, 然后在这里调用各个fragment的方法去传递消息
            ArticleFragment articleFrag = (ArticleFragment)getSupportFragmentManager().findFragmentById(R.id.article_fragment);
    
            if (articleFrag != null) {
                articleFrag.updateArticleView(position);
            } else {
                ArticleFragment newFragment = new ArticleFragment();
                Bundle args = new Bundle();
                args.putInt(ArticleFragment.ARG_POSITION, position);
                newFragment.setArguments(args);
            
                FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    
                transaction.replace(R.id.fragment_container, newFragment);
                transaction.addToBackStack(null);
                transaction.commit();
            }
        }
    }

    其实整个机制, 就是Activity在创建这些Fragment的时候, 将自己作为Fragment的一个成员变量, 在Fragment产生变化的时候, 可以通过约定的接口方法进行通知, 这些约定的接口方法由Fragment来定义, 由Activity来实现.

  • 相关阅读:
    runas用法
    转:在 DB2 9.7 for Linux, UNIX, and Windows OLTP 环境中使用 EMC Enterprise Flash Drives 的好处
    Dlink路由器的special application 功能
    对称加密和非对称加密
    转:Windows 7加密促使犯罪几率上升
    S60V5版本的手机QQ支持截图、语音和视频功能
    各类存储设备速度比较
    DiffieHellman密钥交换协议工作过程
    转:QQ圈子:社交神器还是隐私魔鬼?
    转:你对存储性能了解多少?
  • 原文地址:https://www.cnblogs.com/milton/p/5430398.html
Copyright © 2011-2022 走看看