我们开始了一个非正式的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实例? 有没有更好的方法来做我上面描述的事情?
如果有帮助,很高兴提供更多详细信息。
答案 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();