• 【转】 Pro Android学习笔记(四七):Dialog(4):一些补充和思考


    目录(?)[-]

    1. 编程思想封装接口
    2. fragment和activity以其他fragment之间的通信

    编程思想:封装接口

    在小例子中,fragment会调用activity的onDialogDone()来显示Toast等信息。在真正项目中,fragment的编写并不需要了解activity的各类方法,好的编程风格是将fragment所涉及的方法以接口的方式封装起来,如下:

    public interface OnMyDialogClickListener { 
        public void onDialogDone(String tag, boolean cancelled, CharSequence message);
    }

    在activity中,增加接口的实现,如下:

    public class MainActivity extends Activity implements OnMyDialogClickListener{
        ......      
        public void onDialogDone(String tag, boolean cancelled, CharSequence message) {
            String s = tag + " responds with: " + message;
            if(cancelled) 
                s = tag + " was cancelled by the user"; 
            Toast.makeText(this, s, Toast.LENGTH_LONG).show(); 
            showInfo(s); 
        } 
    }

    相应地,在fragment中,对该方法的调用,可以写为:

    OnMyDialogClickListener act = (OnMyDialogClickListener)getActivity(); 
    act.onDialogDone(……); 

    对于一些大型项目,如果我们无法确定activity是否真的实现了接口,可以在fragment的早期,即刚关联activity的阶段进行检测,如下:

    @Override 
    public void onAttach(Activity activity) { 
        //onAttach()是合适的早期阶段进行检查MyActivity是否真的实现了接口。
        //采用接口的方式,dialog无需详细了解MyActivity,只需了解其所需的接口函数,这是真正项目中应采用的方式。
     
        try{ 
            OnMyDialogClickListener act = (OnMyDialogClickListener)activity; 
        }catch(ClassCastException e){
            …... activity并不真正支持接口的异常处理...... 
        } 
        super.onAttach(activity); 

    fragment和activity以其他fragment之间的通信

    小例子演示了通过getActivity()获取接口对象或者直接获取activity的对象,实现两者之间的通信。此外fragment也可以通过fragment管理器,通过tag,获取其他fragment实例,从而进行fragment之间的通信。当然从编程思想的角度看,fragment之间的过多进行交叉调用,不利于程序的管控。

    本博文涉及的例子代码,可以在Pro Android学习:Dialog小例子中下载。

    相关链接: 我的Android开发相关文章

  • 相关阅读:
    Ajax函数
    javascript 重定向和打开新窗口(ZZ)
    asp.net 学习
    dojo杂谈
    Deciding between COALESCE and ISNULL in SQL Server
    从 Twitter 运维技术经验可以学到什么
    重新安装ASP.NET命令
    SQL Server 2008中新增的变更数据捕获(CDC)和更改跟踪
    SQL Server 2005/2008/2012中应用分布式分区视图
    数据库运维原则
  • 原文地址:https://www.cnblogs.com/blongfree/p/5047990.html
Copyright © 2020-2023  润新知