Как запустить активности через строковую переменную
Хочу запускать акутивности из массива строк типа такого
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 шт):
Автор решения: Byb
→ Ссылка
Вы вызываете метод getClass() для элементов строкового массива, то есть, для строк. Значит, вы всегда получаете класс String.
Для получения класса по имени в Java можно воспользоваться, например, методом forName() класса Class:
Intent intent = new Intent(MainActivity.this, Class.forName(st[i]));
Только имя класса, передаваемого в метод forName(), если я не ошибаюсь, должно быть полным, начиная от вершины иерархии пакетов приложения. Например:
org.pack1.pack2.pack3.MyActivity
И расширение .class писать не нужно.