【问题标题】:Specify a java.lang.Class name in a text file?在文本文件中指定 java.lang.Class 名称?
【发布时间】:2012-07-13 00:25:53
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 查找java.lang.ClassforName方法。
  • 感谢您的评论。下面的答案给出了相同的信息。我认为这正是我所需要的。

标签: java android class file-io collaboration


【解决方案1】:

您是否尝试过:

  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);
}

【讨论】:

  • 我几乎可以肯定这就是我需要的。谢谢!
【解决方案2】:

使用反射,下面的例子:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    相关资源
    最近更新 更多