Подтвердить что ты не робот

Как я могу начать новую активность Android с помощью строки?

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

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

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

Некоторые вещи, которые я пробовал,

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

и попробовал работать с

startActivityForResult(myIntent, 0); 

но ничего не работает. Любые идеи?

4b9b3361

Ответ 1

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

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, то полное имя Activity A будет x.y.z.A.

Ответ 2

Еще лучший способ (и тот, который используется в системе для запуска 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

Ответ 3

Я не знаю решения, но у меня есть альтернатива.. способ, аналогичный div, скрывать и показывать на веб-страницах.

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

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

Ответ 4

Использовать перечисления!

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);