Android学习--可选别名资源和fragment回调接口

来源:互联网 发布:it解决方案模板 编辑:程序博客网 时间:2024/06/06 09:29
一、可选别名资源
在根据不同设备(手机或平板)生成不同的用户界面时可以用到可选别名资源。别名资源指在目录res/values/refs.xml里设定的资源如:
<resources>
     <item name ="activity_masterdetail" type="layout">@layout/activity_fragment</item>
</resources>

其资源ID是R.layout.activity_masterdetail。注意,别名的type属性决定了资源ID属于什么内部类,即使存放在res/values/下,就像上面的资源ID依旧属于R.layout内部类。

而当需要创建一个可选别名资源时,则要在res目录下新建一个如values-sw600dp的目录,并在里面存放refs.xml。其中-sw600dp的意思是smallest width(最小宽度),其指的是屏幕的最小尺寸(与方向无关)。


其修饰符格式共有三种:
        wXXXdp ------      有效宽度:宽度大于或等于XXXdp
        hXXXdp   ------      有效高度:高度大于或等于XXXdp

        swXXXdp  ------      最小宽度:宽度或高度(两者中最小的那个)大于或等于XXXdp


二、fragment回调接口
如果要开发一个fragment用来添加其他fragment到同一activity的FragmentManager上,我们的第一反应是直接在初始fragment上加一个监听器,通过监听器获取activity,再把新的fragment托管到activity上。这样做虽然行的通,但是这样一来初始fragment就必须知道托管activity是如何工作的,也就是说该fragment就再也无法作为独立的开发构件来使用了。

所以为了保持fragment的独立性,我们可以在fragment中定义回调接口,委托托管activity来完成那些不应由fragment处理的任务。托管activity将实现回调接口,履行托管fragment的任务。


下面例子中用Callbacks接口代指回调接口。要实现一个Callbacks接口,首先定义一个成员变量存放实现Callbacks接口的对象。然后将托管activity强制类型转换为Callbacks类型变量并复制给Callbacks类型变量。


强制类型转换activity并复制给Callbacks类型变量要在Fragment的生命周期onAttach(Activity activity)中处理,而在onDetach()中则应该将Callbacks变量设置为null。如下:

private Callbacks mCallbacks;
  public interface Callbacks {        void onCrimeSelected(Crime crime);    }    @Override    public void onAttach(Activity activity){         //强制类型转换activity并复制给Callbacks        super.onAttach(activity);        mCallbacks = (Callbacks)activity;    }  @Override    public void onDetach(){                           //销毁方法中将Callbacks设为null        super.onDetach();        mCallbacks = null;    }

而实现回调接口则要在托管fragment的Activity中实现:


public class CrimeListActivity extends SingleFragmentActivity implements CrimeListFragment.Callbacks{     public void onCrimeSelected (Crime crime){        .............       }}


注意:任何托管fragment的activity都必须实现其fragment里的回调接口。



0 0
原创粉丝点击