Android中类的反射的两个应用示例

一.类的反射来创建Fragment对象:

//定义一个Fragment的数组对象
Fragment[] fragments = new Fragment[5];

/**
 * 定义五个碎片的类的名字的字符串
 */
private String[] fragmentName = {"TabMatchFragment", "TabTopicFragment", "TabMessageFragment", "TabBoxFragment", "TabMeFragment"};

/**
 * 使用反射的方法来做创建实例化Fragment对象
 */
private void createFragment(Integer tag) {
    //包名+类型
String name = "com.lwz.mathbox.ui.fragment.tab." + fragmentName[tag];

         //newInstance是Fragment中实例化fragment的方法
        Fragment fragment = (Fragment) Class.forName(name).newInstance();
    //把创建的Fragment对象放到对应的Fragment数组中    
fragments[tag] = fragment;
    }

二.使用类的反射来获取资源文件的资源

       在AndroidStudio中的mipmap资源文件夹如果存在a1.jpg文件
       使用下面语句可以使用类的反射来获取资源文件的资源ID,并显示图片在页面上。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ImageView imageView = new ImageView(this);
        imageView.setImageResource(getMipmapId(this, "a1"));
        setContentView(imageView);
}
//获取资源ID的类反射的具体实现  
public static int getMipmapId(Context paramContext, String paramString) {
    return paramContext.getResources().getIdentifier(paramString,
            "mipmap", paramContext.getPackageName());
    }
}

       对于第二个应用在Android程序中还是比较有用的,比如要加载几十个小图片在网页上面,如果全部的资源文件列出来是比较麻烦的。如果是使用for循环先定义图片的文件名,再使用反射来获取资源的ID是比较方便的。

三.一个Android资源文件的类反射实现后的工具类:

import android.content.Context;
public class CPResourceUtil { 
    //获取布局文件的ID
    public static int getLayoutId(Context paramContext, String paramString) { 
        return paramContext.getResources().getIdentifier(paramString, "layout", 
                paramContext.getPackageName()); 
    } 

//获取String字符串的ID
    public static int getStringId(Context paramContext, String paramString) { 
        return paramContext.getResources().getIdentifier(paramString, "string", 
                paramContext.getPackageName()); 
} 

 //获取drawable文件夹里面的图片的ID,这是Eclipse中的
    public static int getDrawableId(Context paramContext, String paramString) { 
        return paramContext.getResources().getIdentifier(paramString, 
                "drawable", paramContext.getPackageName()); 
} 

 //获取mipmap文件夹里面的图片的ID,这是AndroidStudio中的
public static int getMipmapId(Context paramContext, String paramString) {
    return paramContext.getResources().getIdentifier(paramString,
            "mipmap", paramContext.getPackageName());
}

      //获取values文件夹里面的资源style的ID 
    public static int getStyleId(Context paramContext, String paramString) { 
        return paramContext.getResources().getIdentifier(paramString, 
                "style", paramContext.getPackageName()); 
} 

      //获取里面的资源的ID 
    public static int getId(Context paramContext, String paramString) { 
        return paramContext.getResources().getIdentifier(paramString,"id", paramContext.getPackageName()); 
} 

      //获取values文件夹里面的资源color的ID 
    public static int getColorId(Context paramContext, String paramString) { 
        return paramContext.getResources().getIdentifier(paramString, 
                "color", paramContext.getPackageName()); 
} 

 //获取values文件夹里面的资源array的ID 
    public static int getArrayId(Context paramContext, String paramString) { 
        return paramContext.getResources().getIdentifier(paramString, 
                "array", paramContext.getPackageName()); 
    } 
} 
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

峥嵘life

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值