我的应用程序有几个活动,以及"开始活动"纽扣。我为此创建了一个自定义视图。因此,我不需要处理点击处理程序和切换语句,我可以在布局的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
不会被抛出,在调试器中,我可以在Activity
的超类树中看到check
。我不知道,我做错了什么?
答案 0 :(得分:1)
isInstance()并且instanceOf将不起作用。
你可以做到
if (!Activity.class.isInstance(check.newInstance()))
或
if (!(check.newInstance() instanceof Activity))
假设为此检查实例化对象是安全的。