activity跳转时,怎么使用字符串作为id跳转?

时间:2022-11-09 17:39:24
比如我有10个activity,可能会有更多。
由于跳转到的activity不固定,由服务器端配置手机客户端的显示状况,而且activity的数量也不固定,所以不能用选择判断。
希望实现以下方式达成跳转。
Activity act = Activity.Parse("myActivity");      // myActivity是用jason传过来的参数
Intent intent = new  Intent(this, act.class);     
startActivity(intent);
想在就是想找个类似Parse之类的方法可使让字符串转成具体的类型来跳转。

9 个解决方案

#1


可以为每个activity事先定义好action,根据action来启动.
http://blog.csdn.net/elfylin/article/details/6001460

#2


activity的数量也不固定????
怎么会不固定的呢,那你是不是要先在AndroidManifest.xml注册呢?

#3


Class send = Class.forName(sendClass);
intent.setClass(thisActivity.this, send);

sendclass就是个字符串

#4


反射是吧? 楼上是对的

#5


用反射啊,3L正解

#6


反射是一种好方式

#7


3楼的方式好用。
Class activity = Class.forName("com.example.tt.newActivity");
Intent intent = new  Intent(this, activity);
startActivity(intent);

又找了一下资料,发现自带的方法也可以使用。
看起来内部就是使用反射实现的。
String strPackage = MainActivity.this.getPackageName();
intent.setComponent(new ComponentName(strPackage, strPackage + "." + "newActivity"));
startActivity(intent);


现在的问题是,使用反射需要这个异常。
public void button1Click(View v) throws ClassNotFoundException{
但是不太懂为什么要声明这个异常,就算不声明,不是出了异常也是一样的往外抛么?

另外java的反射没用过,但是C#的反射就效率很差,不知道java的是不是也一样。。。

#8


引用 7 楼 kolosi 的回复:
3楼的方式好用。
Class activity = Class.forName("com.example.tt.newActivity");
Intent intent = new  Intent(this, activity);
startActivity(intent);

又找了一下资料,发现自带的方法也可以使用。
看起来内部就是使用反射实现的。
String strPackage = MainActivity.this.getPackageName();
intent.setComponent(new ComponentName(strPackage, strPackage + "." + "newActivity"));
startActivity(intent);


现在的问题是,使用反射需要这个异常。
public void button1Click(View v) throws ClassNotFoundException{
但是不太懂为什么要声明这个异常,就算不声明,不是出了异常也是一样的往外抛么?

另外java的反射没用过,但是C#的反射就效率很差,不知道java的是不是也一样。。。


这么简单的一个东西为什么搞那么复杂?为每个activity定义一个action很难吗?根据action来启动不比反射什么的方便点吗?

#9


引用 8 楼 guoyoulei520 的回复:
Quote: 引用 7 楼 kolosi 的回复:

3楼的方式好用。
Class activity = Class.forName("com.example.tt.newActivity");
Intent intent = new  Intent(this, activity);
startActivity(intent);

又找了一下资料,发现自带的方法也可以使用。
看起来内部就是使用反射实现的。
String strPackage = MainActivity.this.getPackageName();
intent.setComponent(new ComponentName(strPackage, strPackage + "." + "newActivity"));
startActivity(intent);


现在的问题是,使用反射需要这个异常。
public void button1Click(View v) throws ClassNotFoundException{
但是不太懂为什么要声明这个异常,就算不声明,不是出了异常也是一样的往外抛么?

另外java的反射没用过,但是C#的反射就效率很差,不知道java的是不是也一样。。。


这么简单的一个东西为什么搞那么复杂?为每个activity定义一个action很难吗?根据action来启动不比反射什么的方便点吗?

肯定不会,以后代码你加一个activity就得再定义一个action,破坏封装。
用上面两种方法,添加新窗体不用定义action。
另外建好的窗体拿到别的程序里面用什么都不用修改。

#1


可以为每个activity事先定义好action,根据action来启动.
http://blog.csdn.net/elfylin/article/details/6001460

#2


activity的数量也不固定????
怎么会不固定的呢,那你是不是要先在AndroidManifest.xml注册呢?

#3


Class send = Class.forName(sendClass);
intent.setClass(thisActivity.this, send);

sendclass就是个字符串

#4


反射是吧? 楼上是对的

#5


用反射啊,3L正解

#6


反射是一种好方式

#7


3楼的方式好用。
Class activity = Class.forName("com.example.tt.newActivity");
Intent intent = new  Intent(this, activity);
startActivity(intent);

又找了一下资料,发现自带的方法也可以使用。
看起来内部就是使用反射实现的。
String strPackage = MainActivity.this.getPackageName();
intent.setComponent(new ComponentName(strPackage, strPackage + "." + "newActivity"));
startActivity(intent);


现在的问题是,使用反射需要这个异常。
public void button1Click(View v) throws ClassNotFoundException{
但是不太懂为什么要声明这个异常,就算不声明,不是出了异常也是一样的往外抛么?

另外java的反射没用过,但是C#的反射就效率很差,不知道java的是不是也一样。。。

#8


引用 7 楼 kolosi 的回复:
3楼的方式好用。
Class activity = Class.forName("com.example.tt.newActivity");
Intent intent = new  Intent(this, activity);
startActivity(intent);

又找了一下资料,发现自带的方法也可以使用。
看起来内部就是使用反射实现的。
String strPackage = MainActivity.this.getPackageName();
intent.setComponent(new ComponentName(strPackage, strPackage + "." + "newActivity"));
startActivity(intent);


现在的问题是,使用反射需要这个异常。
public void button1Click(View v) throws ClassNotFoundException{
但是不太懂为什么要声明这个异常,就算不声明,不是出了异常也是一样的往外抛么?

另外java的反射没用过,但是C#的反射就效率很差,不知道java的是不是也一样。。。


这么简单的一个东西为什么搞那么复杂?为每个activity定义一个action很难吗?根据action来启动不比反射什么的方便点吗?

#9


引用 8 楼 guoyoulei520 的回复:
Quote: 引用 7 楼 kolosi 的回复:

3楼的方式好用。
Class activity = Class.forName("com.example.tt.newActivity");
Intent intent = new  Intent(this, activity);
startActivity(intent);

又找了一下资料,发现自带的方法也可以使用。
看起来内部就是使用反射实现的。
String strPackage = MainActivity.this.getPackageName();
intent.setComponent(new ComponentName(strPackage, strPackage + "." + "newActivity"));
startActivity(intent);


现在的问题是,使用反射需要这个异常。
public void button1Click(View v) throws ClassNotFoundException{
但是不太懂为什么要声明这个异常,就算不声明,不是出了异常也是一样的往外抛么?

另外java的反射没用过,但是C#的反射就效率很差,不知道java的是不是也一样。。。


这么简单的一个东西为什么搞那么复杂?为每个activity定义一个action很难吗?根据action来启动不比反射什么的方便点吗?

肯定不会,以后代码你加一个activity就得再定义一个action,破坏封装。
用上面两种方法,添加新窗体不用定义action。
另外建好的窗体拿到别的程序里面用什么都不用修改。