如果我在我的应用程序调用测试活动的Activity类,是有办法通过其名称来获得同级车就像这个例子:
Class<?> c = getClassByName("TestActivity");
如果我在我的应用程序调用测试活动的Activity类,是有办法通过其名称来获得同级车就像这个例子:
Class<?> c = getClassByName("TestActivity");
使用的forName代替..
这样的事情..
try {
Class<?> act = Class.forName("com.bla.TestActivity");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
该的Class.forName似乎有它的例外。 这仅仅是在上面的扩大来解决这个问题。
try { t = Class.forName("com.package.classname"); } catch (Exception ignored){}
您可以使用Class::forName
获得未知类型的类对象。 如果你想获得一个类型类,你可以使用Class::asSubclass
对返回的类Class::forName
:
Class<? extends Activity> activityClass = Class.forName("com.example.TestActivity")
.asSubclass(Activity.class);
当然,你也必须处理很多不同类型的异常的。 与反射打交道时,通常。
我也有过类似的要求,我只好从包含屏幕和活动映射后端来一个JSON。 由于共同的JSON两个的iOS / Android的,我们不可能添加了如Activity
为JSON,所以这是我们所做的事情
在JSON所有Activity
或Viewcontrollers
,使用简单的名称,即对HomeActivity
和HomeViewController
我们将在JSON使用“家”
在应用中,我们解析JSON,我已经写了下面的实用方法来获取动态活动
要获取类的名称(即,如果我们通过主页,我们会尽快com.package.HomeActivity
)
fun getClassInfoFor(name: String, context: Context):String{
var str = "${context.getPackageName()}.${name}Activity"
return str
}
我们从字符串获取类
try {
val className = Utilties.getClassInfoFor(activityNameFromJSON, context)
val fetchedClass = Class.forName(className)
val showDetailsIntent = Intent(context, fetchedClass)
context.startActivity(showDetailsIntent)
} catch (e: ClassNotFoundException) {
e.printStackTrace()
}
这样,我可以很容易地用同样的方法管理多类。 我在我的每一个细胞导航到不同的活动回收者视图使用此。
它可能不是你的问题最相关的答案,但它是普遍不好硬编码类名称文字为字符串。 这可能是更好的使用
Class<?> act = TestActivity.class;
句法。