2010-02-02 89 views
2

我有以下的代码来调用新的活动如何在意图调用新活动时使用变量?

现在我想用变量调用新的活动

字符串VAR1,VAR2,VAR3; var1 =“登录”; var2 =“注册”; var3 =“more”;

Intent i; 
i = new Intent(Favorites.this, Login.class); --> login.class with var 
startActivity(i); 

任何一个可以指导我如何实现这个?

回答

4

你不能在作为传递一个字符串该参数必须是一个Activity。

使用if或switch语句在不同选择之间切换。

像这样的事情也许....

Intent i; 
switch(var) 
case:Login 
i = new Intent(Favorites.this, Login.class); 
break; 
case:Signup 
i = new Intent(Favorites.this, Signup.class); 
break; 
case:More 
i = new Intent(Favorites.this, More.class); 
break; 


startActivity(i); 
+4

只是你不能切换Java中的字符串;-) – Matthias 2010-02-02 14:55:16

+0

真的,但你必须让人们自己找出一些事情:-) – 2010-02-02 15:01:02

0

如果你想添加的数据,你将不得不使用不同的意图构造:

public Intent(String action, Uri uri, Context packageContext, Class<?> cls) 

在URI你可以把你自己的信息。有关更多详情,请参阅this link

1

从Maurits的给的链接,你也可以看看putExtras方法。

查看更多信息here和搜索putExtra(犯规好看所以URL)

*编辑:

从多纳尔拉弗蒂后,我想我现在明白你在OP的意思。

你可以做的是以下:

String theClass = "Login"; 
StringBuilder myAction = new StringBuilder("com.yourpackage."); 
myAction.append(theClass); 
Intent i = new Intent(myAction.toString()); 
startActivity(i) 

的myAction字符串(在这个例子中com.yourpackage.Login应该在AndroidManifest.xml中指定的活动

下从DOC:

公众意向(串动)

自:API等级1 与给定的交流创建意图灰。所有其他字段(数据,类型,类)都为空。注意动作一定要在一个命名空间,因为意图在系统中全球使用 - 例如系统视图动作android.intent.action.VIEW;应用程序的自定义操作就像com.google.app.myapp.CUSTOM_ACTION一样。

+0

我假设MyClass的开始的意图。 append(theClass)应该是myAction.append(theClass) – 2010-02-03 07:51:44

+0

@Maurits - 哎呀,我只是修复它 - 谢谢 – ccheneson 2010-02-03 11:56:15

8

编辑:增加了变量活动类。

您可以将意图上的变量设置为intent中的额外值。您可以轻松地将类名传递给您的意图。所以,你可以说:

Class activityClass = Login.class; // This could be passed in as a variable. 

Intent i; 
i = new Intent(Favorites.this, activityClass); --> login.class with var 
i.putExtra("var1", "Login"); 
i.putExtra("var2", "Signup"); 
i.putExtra("var2", "more"); 
startActivity(i); 

Here is an example

你也可以把这些变量中捆绑并通过整捆的额外如下:

Class activityClass = Login.class; 

Intent i; 
i = new Intent(Favorites.this, activityClass); --> login.class with var 
Bundle bundle = new Bundle(); 
bundle.putString("var1", "Login"); 
bundle.putString("var2", "Signup"); 
bundle.putString("var2", "more"); 
i.putExtras(bundle); 
startActivity(i); 
+0

不,你没有给我举例传递价值到另一个活动,但我想动态调用活动我想用变量替换login.class ..多数民众赞成的问题.. – UMAR 2010-02-02 14:16:46

+1

所以你想要用一个变量替换Login.class然后。究竟是什么阻止你这么做? – Matthias 2010-02-02 15:56:27

+0

如Matthias所说,Login.class可以是一个变量。查看更新后的答案。 – 2010-02-02 17:26:53

1

试试这个
try {
  String className = 'com.www.tutorialforandroid.com.openActivity';
  Intent openNewIntent = new Intent(this, Class.forName(className));
  startActivity( openNewIntent);
} catch (ClassNotFoundException e) {
  e.printStackTrace();
}

0

可以使用一个变量,像这样

Intent intent = new Intent(); 
String packageName = "my.package"; 
String className = "com.package.MyActivity"; 
intent.setClassName(packageName, className); 
startActivity(intent); 
相关问题