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

来源:互联网 发布:mp3拼接软件 编辑:程序博客网 时间:2024/05/20 04:27

一.类的反射来创建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 0
原创粉丝点击