1

我们在工作中成立了一个非正式的 Android 开发小组。我们每个人都将向单个应用程序添加半独立的活动。昨天闲逛,我能想出的最好的办法是让我们的主要活动成为一个 GridView,并允许开发人员通过硬编码数组中的一个元素在主要活动中“注册”他们的活动 '行动项目':

    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,它的注册如上所示。

我们希望在网格景观中的图像和标签的字符串中的图像以及最重要的是,在选择相应的GridView项时,将通过意图启动的类。

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

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

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

4

2 回答 2

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);
}
于 2012-07-13T00:31:15.053 回答
0

使用反射,下面的示例:

Class theClass  = Class.forName("YourClass");
YourClass instancevariable = (YourClass)theClass.newInstance();
于 2012-07-13T00:31:27.163 回答