Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I start a new android activity using class name in a string?

I'm having a problem with an android application that I'm working on.

My application has several sections and the next screen that loads is based on a string. So, screen 1 of section 1 would be, S1S1.

My question is, how can I start an activity based on a string. I have S1S1 saved in a string, let us call it next activity. Rather than having to type S1S1.class, I need it to come from the string. I've tried everything I can think of and google hasn't helped much.

Some things I've tried are

Intent myIntent = new Intent(nextactivity);
Intent myIntent = new Intent(v.getContext(), getClass().getName().valueOf(nextactivity));
Intent myIntent = new Intent(v.getContext(), Class.forName(nextactivity));

and tried running with

startActivityForResult(myIntent, 0); 

but nothing seems to work. Any ideas?

like image 390
fahadayaz Avatar asked Apr 22 '11 11:04

fahadayaz


People also ask

How can you create an android activity?

To create the second activity, follow these steps: In the Project window, right-click the app folder and select New > Activity > Empty Activity. In the Configure Activity window, enter "DisplayMessageActivity" for Activity Name. Leave all other properties set to their defaults and click Finish.


2 Answers

Here is a code by which you can start activity using the name of the activity

String activityToStart = "com.example.MainActivity";
try {
    Class<?> c = Class.forName(activityToStart);
    Intent intent = new Intent(this, c);
    startActivity(intent);
} catch (ClassNotFoundException ignored) {
}

EDIT

Here class name will be full name of the class with the package name. For example if your package name will be x.y.z and if you have Activity name called A then the full name of the Activity A will be x.y.z.A.

like image 184
Dharmendra Avatar answered Oct 17 '22 14:10

Dharmendra


An even better way (and one that is used in the system to launch Browser.apk along with other apps that aren't bundled with AOSP):

Intent intent = new Intent();
intent.setClassName("com.android.browser","com.android.BrowserActivity");

context.startActivity(intent);

Alternatively, if you want to check that you can start the Activity from the command line, you can do something like this from your shell:

adb shell
am start com.android.browser/.BrowserActivity
like image 38
Ehtesh Choudhury Avatar answered Oct 17 '22 15:10

Ehtesh Choudhury