R.string.xxx返回的是int类型,而不是string类型

问题描述:

  • 在研究菜鸟商城项目源码的时候,其中使用FragmentTabHost+fragment实现底部菜单,其用法有关键三点:1、Activity 要继承FragmentActivity;2、调用setup() 方法;3、添加TabSpec。在这过程中,发现定义的的一个Tab类中,title明明是定义为int类型,但是在new Tab()时,传入的是R.string.home竟然不报错,而我以为R.string.home是string类型的啊,这怎么会不报错呢 ? 后来才知道其中的原理,那就是java编译的的时候会把string类型变量存放在栈的临时变量表中,并给出一个int类型的ID指向此变量。并且,因为底部菜单是由图标和文字组成,就需要使用到string类型的文本,所以,通过getString( )方法,因为getString( ) 方法底层实现过程有一句“Resource id for the string”,也就是说,并不是将int类型转换成string类型,而是通过id获取到相关的string数据资源。
public class Tab {

    private  int title;
    private  int icon;
    private Class fragment;

    public Tab(Class fragment,int title, int icon) {
        this.title = title;
        this.icon = icon;
        this.fragment = fragment;
    }
Tab tab_home = new Tab(HomeFragment.class,R.string.home,R.drawable.selector_icon_home);
TabHost.TabSpec tabSpec = mTabhost.newTabSpec(getString(tab.getTitle()));
    /**
     * Returns a localized string from the application's package's
     * default string table.
     *
     * @param resId Resource id for the string
     * @return The string data associated with the resource, stripped of styled
     *         text information.
     */
    @NonNull
    public final String getString(@StringRes int resId) {
        return getResources().getString(resId);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,571评论 0 17
  • 最近浑浑噩噩 发个职位发的颠三倒四 各种忘事 工作压力好大 每天装作鸡血满满的样子好累
    青sir阅读 107评论 0 0
  • 聊奧胖兒(大衛 奧伊斯特拉赫),我輩不必談水平技巧,只說感覺風格足矣。 他拉琴不快,亦不炫技,但總覺有力量壓在琴弓...
    张提壶阅读 233评论 0 1
  • 在忙碌中 浪费了光阴 买了很多书却成就了屯积 许多爱好 许多计划 以无心情为借口 一一放下 没有了坚持 疏于整理的...
    闲耕堂一一想想阅读 221评论 0 4