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

一、可选别名资源
在根据不同设备(手机或平板)生成不同的用户界面时可以用到可选别名资源。别名资源指在目录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里的回调接口。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值