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

  • 相关阅读:
    Win32 DPAPI加密编程
    .NET环境下的DPAPI加密编程
    Windows加密API的功能分类
    Windows加密API的层次
    Windows加密服务架构
    简单H5单页面真机调试
    vue中使用动画vue-particles
    particular.js
    sublime快捷键
    判断内核
  • 原文地址:https://www.cnblogs.com/milton/p/5430398.html
Copyright © 2011-2022 走看看