2013-08-20 80 views
0

假设我有两个活动(在同一包下):如何重定向到另一个活动与短类名

HomeActivity(启动器活动)

SpinnerActivity

他们两人登记在AndroidManifest.xml

现在,我尝试创建一个方法来实现活动跳:

private void redirectToActivity(String dest) { 
    Intent intent = new Intent(); 
    intent.setClassName(this,dest); 
    startActivity(intent); 
} 

,我把它叫做在HomeActivity

redirectToActivity("SpinnerActivity"); 

但我得到这个错误:

Unable to find explicit activity class {com.app/SpinnerActivity}; have you declared this activity in your AndroidManifest.xml?

我试图增加这一行:

intent.setPackage("com.app"); 

它不起作用。

有什么问题?

+0

而不是使用字符串,也许你可以使用类变量? –

+0

你可以发布你的清单文件吗? 如果您的清单中的活动名称是“.SpinnerActivity”,请尝试以下列方式启动它: redirectToActivity(“.SpinnerActivity”); –

+0

查看是否将'intent.setClassName(this,dest);'改为'intent.setClassName(getApplicationContext(),dest);'工作。 – Vikram

回答

1

//定义全局或在它的OnCreate()方法

//如果你的所有活动都在同一个包,那么这种做法是去工作。

final String packageName = this.getClass().getPackage().getName(); 
final Context context = this; 

// call your method like this i.e SpinnerActivity 
     private void redirectToActivity(String dest) { 

        try { 
         Class c = Class.forName(packageName + "." + dest); 
         startActivity(new Intent(context, c)); 
        } catch (ClassNotFoundException e) { 
         Toast.makeText(context, String.valueOf(e), 5000).show(); 
        } 
      } 
+0

没错。这工作。 – hguser

1
Unable to find explicit activity class {com.app/SpinnerActivity}; have you declared this activity in your AndroidManifest.xml? 

你的包名是奇数。我习惯于像“com.company.appname”,你有com.app/SpinnerActivity。你有没有试过朝这个方向思考?

+0

因为这是一个学习android的应用程序。所以我使用'com.app'作为包名称,这是否重要? – hguser

相关问题