android--------实现Activity和Fragment通信的面向对象的万能接口
前言

最后在Activity中实现通信:
public class MainActivity extends AppCompatActivity{
    private ArrayList<Fragment> fragmentArrayList = new ArrayList<>();
    private Fragment mCurrentFragment;
    private BottomNavigationBar mBottomNavigationBar;
    BadgeItem badgeItem;
    FragmentManager mFragmentManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }
    private void initView(){
        mFragmentManager = getSupportFragmentManager();
        initFragemnt();
        showFragment(0);
        mBottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar);
        mBottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);
        mBottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC);
        mBottomNavigationBar.setBarBackgroundColor(android.R.color.white);
        badgeItem = new BadgeItem()
                .setBackgroundColor(Color.RED).setText("99")
                .setHideOnSelect(true); //设置被选中时隐藏角标
        mBottomNavigationBar
                .setActiveColor(R.color.colorAccent) //设置选中的颜色
                .setInActiveColor(R.color.colorPrimary);//未选中
        mBottomNavigationBar.addItem(new BottomNavigationItem(R.mipmap.ic_launcher, "首页"))
                .addItem(new BottomNavigationItem(R.mipmap.ic_launcher, "店铺"))
                .addItem(new BottomNavigationItem(R.mipmap.ic_launcher, "购物车"))
                .addItem(new BottomNavigationItem(R.mipmap.ic_launcher, "我的").setBadgeItem(badgeItem))
                .initialise();
        mBottomNavigationBar.setTabSelectedListener(new BottomNavigationBar.OnTabSelectedListener(){
            @Override
            public void onTabSelected(int position) {
                showFragment(position);
            }
            @Override
            public void onTabUnselected(int position) {
            }
            @Override
            public void onTabReselected(int position) {
            }
        });
    }
    private void showFragment(int page) {
        FragmentTransaction mFragmentTransaction = mFragmentManager
                .beginTransaction();
        if (mCurrentFragment != null) {
            mFragmentTransaction.hide(mCurrentFragment);
        }
        mCurrentFragment = fragmentArrayList.get(page);
        if (mCurrentFragment.isAdded())
        {
            mFragmentTransaction.show(mCurrentFragment);
        }else {
            mFragmentTransaction.add(R.id.fragmenta, mCurrentFragment,mCurrentFragment.getClass().getName());
        }
        mFragmentTransaction.commitAllowingStateLoss();
    }
    private void initFragemnt(){
        fragmentArrayList.add(new A());
        fragmentArrayList.add(new B());
        fragmentArrayList.add(new C());
        fragmentArrayList.add(new D());
    }
    public void setFunctionForFragment(final String tag){
        BaseFragment fragment=(BaseFragment)mFragmentManager.findFragmentByTag(tag);
        FunctionManager functionManager=FunctionManager.getInstance();
        fragment.setmFunctionManager(functionManager.addFunction(new FunctionNoParamNotResult(A.INTERFCE) {
            @Override
            public void function() {
                Toast.makeText(MainActivity.this,"无参无返回值"+tag,Toast.LENGTH_LONG).show();
            }
        }).addFunction(new FunctionNoParamWithResult<String>(B.INTERFCE) {
            @Override
            public String function() {
                Toast.makeText(MainActivity.this,"无参有返回值",Toast.LENGTH_LONG).show();
                return "张三";
            }
        }).addFunction(new FunctionWithParamNoResult<Integer>(C.INTERFCE) {
            @Override
            public void function(Integer o) {
                Toast.makeText(MainActivity.this,"有参无返回值"+o,Toast.LENGTH_LONG).show();
            }
        }).addFunction(new FunctionWithParamResultn<String>(D.INTERFCE) {
            @Override
            public String function(String o) {
                Toast.makeText(MainActivity.this,"有参有返回值"+o,Toast.LENGTH_LONG).show();
                return "zhangqie";
            }
        }));
    }
}
效果图:

源码下载Github:https://github.com/DickyQie/android-fragment-interface
android--------实现Activity和Fragment通信的面向对象的万能接口的更多相关文章
- 架构师成长之路-基于android fragment通信的面向对象的万能接口
		
前言 开发一个app时,常用Activity和Fragment,由于操作方便Fragment越来越受欢迎,这样就避免不了Activity和Fragment.Fragment和Fragment之间的通信 ...
 - Android之Activity与Service通信
		
一.当Acitivity和Service处于同一个Application和进程时,通过继承Binder类来实现. 当一个Activity绑定到一个Service上时,它负责维护Service实例的引用 ...
 - 从Android中Activity之间的通信说开来[转]
		
http://www.cnblogs.com/virusswb/archive/2011/08/02/2124824.html 引言 最近两个星期在研究android的应用开发,学习了android应 ...
 - Android中Activity加入Fragment使用注意事项及常用技巧
		
Fragment中AlertDialog弹出窗口的使用 Fragment默认不具有Content的一些方法和属性,因此在Activity中可以使用的一些方法在Fragment中使用就需要一些小技巧了 ...
 - 【android】activity、fragment传值例子
		
1:Activity篇 1.1向Activity传值 关键点在于putExtra.如果传递类的话,记得类实现Serializable接口 Intent intent = new Intent(Firs ...
 - Android之Activity与fragment完整生命周期图
		
转自:https://github.com/xxv/android-lifecycle
 - Android:手把手教你 实现Activity 与 Fragment 相互通信,发送字符串信息(含Demo)
		
前言Activity 与 Fragment 的使用在Android开发中非常多今天,我将主要讲解 Activity 与 Fragment 如何进行通信,实际上是要解决两个问题: Activity 如何 ...
 - Android 数据传递(二)Activity与fragment之间的通信
		
在网上找到了一篇总结的非常好的文章,我这里就贴出他的博文地址.自己就不再写这个方面的总结了. Activity与Fragment通信(99%)完美解决方案
 - Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)
		
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
 
随机推荐
- MVC  自定义特性(验证用户登录session是否已经过期)
			
新建一个类 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)] publ ...
 - 全排列+字符串查找|扑克排序|2014年蓝桥杯A组题解析第六题-fishers
			
标题:扑克序列 A A 2 2 3 3 4 4, 一共4对扑克牌.请你把它们排成一行. 要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌. 请填写出所有符合要求的排 ...
 - kafka丢失和重复消费数据
			
Kafka作为当下流行的高并发消息中间件,大量用于数据采集,实时处理等场景,我们在享受他的高并发,高可靠时,还是不得不面对可能存在的问题,最常见的就是丢包,重发问题. 1.丢包问题:消息推送服务,每天 ...
 - WinMerge 过滤器用法
			
WinMerge是一款开源的文件对比合并工具.http://winmerge.org/WinMerge提供了“过滤器”功能,可以在对比时排除特定的目录或文件. 1.编辑过滤规则工具 -> 过滤器 ...
 - 安装 Linux 内核 4.0
			
大家好,今天我们学习一下如何从Elrepo或者源代码来安装最新的Linux内核4.0.代号为‘Hurr durr I'm a sheep’的Linux内核4.0是目前为止最新的主干内核.它是稳定版3. ...
 - printf和std::cout ...endl
			
printf效率要比std::cout...endl高些,可以减少打印所花时间
 - jvm 内存溢出问题排查方法
			
如果你做TCP通讯或者map集合操作,并发处理等功能时,很容易出现 Java 内存溢出的问题.本篇文章,带领大家深入jvm,分析并找出jvm内存溢出的代码. jvm中除了程序计数器,其他的区域都有可能 ...
 - js运算符的一些特殊应用
			
作者: 小文 来源: http://www.cnblogs.com/daysme/ 时间: 2017/3/2 17:21:03 本文集合了了js运算符的一些特殊应用. js位运行符的运用. js运算符 ...
 - python学习 day016打卡 面向对象--成员
			
本节主要内容: 1.类的成员 2.类的成员-变量 3.类的成员-方法 4.类的成员-属性 5.私有 一.类的成员: 能在类中写的内容就是类的成员. class 类名: #方法 def __init__ ...
 - python接口测试模版
			
"""Test case implementation""" import sys import functools import diff ...