以活动名称作为变量开始一个活动

问题描述:

我正在尝试从小吃店以字符串作为活动名称开始活动。以活动名称作为变量开始一个活动

的小吃吧代码:

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"); 

当然,你需要更改包姓名(或名称),以适应自己的应用程序。

+0

即时通讯相当新的Android开发和IDE建议Class.forname。 有什么更好的解决方案? –

+0

@NirGolan不是传入字符串意图,而是传入一个Class变量,并直接将它传递给Intent构造函数。 –

+0

谢谢。我再次冲你的答案,并理解。而不是字符串意图一个类的意图。它的工作现在。谢谢 –