Как я могу начать новую активность Android с помощью строки? - PullRequest
30 голосов
/ 22 апреля 2011

У меня проблема с приложением Android, над которым я работаю.

Мое приложение имеет несколько разделов, и следующий загружаемый экран основан на строке.Таким образом, экран 1 раздела 1 будет S1S1.

У меня вопрос, как я могу начать занятие на основе строки?Я сохранил S1S1 в строку, давайте назовем это nextactivity.Вместо того, чтобы вводить S1S1.class, мне нужно, чтобы он пришел из строки.Я перебираю все, что могу, и Google на самом деле не помог1012 * но, похоже, ничего не работает.Есть идеи?

Ответы [ 4 ]

66 голосов
/ 22 апреля 2011

Вот код, с помощью которого вы можете начать занятие, используя название занятия

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

РЕДАКТИРОВАТЬ

Здесь имя класса будет полным именемкласс с именем пакета.Например, если имя вашего пакета будет x.y.z и если у вас будет Имя действия с именем A, тогда полное имя действия A будет x.y.z.A.

30 голосов
/ 06 июня 2012

Еще лучший способ (и тот, который используется в системе для запуска Browser.apk вместе с другими приложениями, не входящими в комплект AOSP):

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

context.startActivity(intent);

В качестве альтернативы, если вы хотите проверить, можете ли вы запустить Activity из командной строки, вы можете сделать что-то подобное из вашей оболочки:

adb shell
am start com.android.browser/.BrowserActivity
0 голосов
/ 22 апреля 2011

Я не знаю о решении, но у меня есть альтернатива ... способ похожий на div hide и show на веб-страницах.

если ваш s1s1 загружен с низким содержанием, поместите их в линейное расположение и сохраните видимость при загрузке формы s1. когда вы нажимаете на s1, чтобы достичь s1s1, скрываете s1 и устанавливаете параметры видимости на «видимый».

Делая это, вы можете избежать создания отдельного действия, и таким способом также легко вернуться назад.

0 голосов
/ 22 апреля 2011

Используйте Enums!

public enum SectionActivity {

  S1S1(MyS1Activity.class),
  S1S2(S2Activity.class);

  private Class<? extends Activity> activityClass;

  private SectionActivity(Class<? extends Activity> clazz) {

   this.activityClass = clazz;
  }

  public Class<? extends Activity> getActivity {
     return activityClass;
  }    
}

Тогда где-то в вашем коде:

SectionActivity act = SectionActivity.valueOf(string);
Intent intent = new Intent(this, act.getActivity());
startActivity(intent);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...