以 Activity 名称作为变量启动 Activity
Posted
技术标签:
【中文标题】以 Activity 名称作为变量启动 Activity【英文标题】:Start an Activity with Activity name as a variable 【发布时间】:2017-06-14 23:49:32 【问题描述】:我正在尝试从小吃店开始一项活动,并将字符串作为活动名称。
小吃店代码是:
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()”。
有什么帮助吗?
【问题讨论】:
【参考方案1】:首先,这是个坏主意。不好意思说。 Class.forName() 不应该这样使用。
如果您想自定义启动哪个活动,请发送一个变量,例如 Class 并使其成为通用变量。
但是如果你真的坚持这个实现,那么它失败的原因是你必须将完整的包名传递给 Class.forName(),而不是在它的末尾添加“.class”。
比如:
Class.forName("com.testapp.ui.Register");
当然,您需要更改包名称以适合您自己的应用程序。
【讨论】:
我对 android 开发相当陌生,ide 建议使用 Class.forname。有更好的解决方案吗? @NirGolan 与其传入字符串意图,不如传入一个 Class 变量并将其直接传递给 Intent 构造函数。 谢谢。我又把你的答案弄红了,明白了。而不是字符串意图一个类意图。它现在工作。谢谢以上是关于以 Activity 名称作为变量启动 Activity的主要内容,如果未能解决你的问题,请参考以下文章
Android查缺补漏--Activity生命周期和启动模式
Android 启动过程Activity 启动源码分析 ( AMS -> ActivityThreadAMS 线程阶段 二 )