以活动名称作为变量开始一个活动
问题描述:
我正在尝试从小吃店以字符串作为活动名称开始活动。以活动名称作为变量开始一个活动
的小吃吧代码:
private void showSnackbar(View view, String massgae, String action, final String intent) {
Snackbar.make(view, massgae, Snackbar.LENGTH_LONG)
.setAction(action, new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent myIntent = null;
try {
myIntent = new Intent(context, Class.forName(intent));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
startActivity(myIntent);
}
})
.setActionTextColor(Color.WHITE)
.setDuration(5000)
.show();
}
,我这个调用它:当它加载
showSnackbar(llMain, getResources().getString(R.string.sbUserNotFound), getResources().getString(R.string.sbRegister), "Register.class");
我得到:
显示java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'java.lang.String android.content.Intent.toString()'。
任何帮助吗?
答
首先,这是一个坏主意。对不起,说。 Class.forName()不应该像那样使用。
如果您希望自定义活动开始,发送一个变量,如类,并使其通用性。
但是如果你真的坚持这个实现,那么失败的原因是因为你必须将完整的包名称传递给Class.forName(),而不是在它的末尾添加“.class”。
因此,像:
Class.forName("com.testapp.ui.Register");
当然,你需要更改包姓名(或名称),以适应自己的应用程序。
即时通讯相当新的Android开发和IDE建议Class.forname。 有什么更好的解决方案? –
@NirGolan不是传入字符串意图,而是传入一个Class变量,并直接将它传递给Intent构造函数。 –
谢谢。我再次冲你的答案,并理解。而不是字符串意图一个类的意图。它的工作现在。谢谢 –