Как запустить активности через строковую переменную

Рейтинг: -1Ответов: 1Опубликовано: 29.05.2023

Хочу запускать акутивности из массива строк типа такого

ListView lv;
String st[] = { "MyActivity1.class", "MyActivity2.class" };
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
    Intent intent = new Intent(MainActivity.this, st[i].getClass());
    startActivity(intent);
    }
});

но никак не получается...

Ответы

▲ 1Принят

Вы вызываете метод getClass() для элементов строкового массива, то есть, для строк. Значит, вы всегда получаете класс String.

Для получения класса по имени в Java можно воспользоваться, например, методом forName() класса Class:

Intent intent = new Intent(MainActivity.this, Class.forName(st[i]));

Только имя класса, передаваемого в метод forName(), если я не ошибаюсь, должно быть полным, начиная от вершины иерархии пакетов приложения. Например:

org.pack1.pack2.pack3.MyActivity

И расширение .class писать не нужно.