在文本文件中指定java.lang.Class名称?

时间:2012-07-13 00:25:53

标签: java android class file-io collaboration

我们开始了一个非正式的Android开发小组。我们每个人都会将半独立的活动添加到一个应用程序中。昨天闲逛,我能想出的最好的方法就是让我们的主要活动是GridView,并允许开发人员通过硬编码数组中的元素在主Activity中“注册”他们的活动。 ActionItems':

    private final ActionItem[] actionItems = {
        new ActionItem(R.drawable.dms_to_dd, "DMS to/from DD", DegreeConverter.class)
    };

其中ActionItem就是这样:

public class ActionItem {

    private int drawingID;
    private String label;
    private java.lang.Class<?> activity;

    public ActionItem(int drawingID, String label, Class<?> activity) {
        this.drawingID = drawingID;
        this.label     = label;
        this.activity  = activity;
    }

    public int getDrawingID() {
        return drawingID;
    }
    public String getLabel() {
        return label;
    }
    public Class<?> getActivity() {
        return activity;
    }   
}

为了让人们开始,我创建了第一个简单的Activity / ActionItem,它的注册如上所示。

我们希望drawable用于GridView中的图像和用于标记的String,最重要的是,当选择相应的GridView项时,将通过Intent启动的类。

所有这一切都有效。但是,如果人们不必编辑主Activity来使其工作,那将是很好的。我希望在填充GridView之前我们可以从文本文件中读取相同的信息(对于ActionItem)。 drawable id和String都没问题。所以主要问题是:我们如何在文本文件中指定该类?

是否有某种方法从名称(String / char [])创建java.lang.Class实例? 有没有更好的方法来做我上面描述的事情?

如果有帮助,很高兴提供更多详细信息。

2 个答案:

答案 0 :(得分:0)

您是否尝试过:

  Class.forName("com.something.MyClass")

http://developer.android.com/reference/java/lang/Class.html#forName(java.lang.String

您可以从文件中读取名称,并在forName方法中设置字符串。

所以,你可以这样做:

  public ActionItem(int drawingID, String label, String activityClassName) {
    this.drawingID = drawingID;
    this.label     = label;
    this.activity  = Class.forName(activityClassName);
}

答案 1 :(得分:0)

使用反射,以下示例:

Class theClass  = Class.forName("YourClass");
YourClass instancevariable = (YourClass)theClass.newInstance();