• 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来实现.

  • 相关阅读:
    虚拟机通过nat(网络地址转换)可以联网但无法解析域名(解决)
    信息安全系统设计与实现:第三章学习笔记
    电子公文系统-规格需求说明书
    团队作业(二):需求分析
    信息安全系统设计与实现:第十一章学习笔记
    Scala --Actor通信模型概述
    Hadoop项目调优
    大数据生态组件常用服务端口
    HBase性能优化总结
    Hbase架构,组件分析 ,Hbase集群搭建
  • 原文地址:https://www.cnblogs.com/milton/p/5430398.html
Copyright © 2020-2023  润新知