1
我的应用程序有几个活动,以及“开始活动”按钮列表。我为此创建了一个自定义视图。为了不需要处理点击处理程序和切换语句,我可以在布局的XML文件中设置custom:start_activity=".OtherActivity"
属性。检查动态创建的类是否为活动
当然,很好的计划。但我必须为此提供错误检测。 start_activity
中的键入的字符串必须是有效的类名,并且该类必须是Activity
的子项。 OtherActivity
是AppCompatActivity
的子类的类的子类。
这是我已经试过:
String name = array.getString(R.styleable.MyView_start_activity);
if (name == null)
throw new IllegalArgumentException("name attribute must be set.");
final String className = context.getPackageName() + activity;
try {
Class<?> check = Class.forName(className); //, false, getClass().getClassLoader()); // create only at click later
if (!Activity.class.isInstance(check))
throw new IllegalArgumentException(className + " is not a valid activity.");
} catch (ClassNotFoundException e) {
throw new IllegalArgumentException(className + " is not a valid class.");
}
然而,isInstance
总是返回false,所以它抛出异常的所有时间。我也试过isAssignableFrom
,以及不同的参数/类变体。给定的字符串是一个有效的类,不会抛出ClassNotFoundException
,并且在调试器中,我可以在check
的超类树中看到Activity
。我不知道,我做错了什么?
'ClassA instanceof ClassB' –
会使用if(check instanceof Activity)吗? –
没有。 'instanceof'做了一个静态检查,所以我不能使用它。 '类>'不能在编译时被铸造。 – klenium