Intereting Posts
Почему мой ProgressDialog прослушивает ЛЮБОЙ КЛЮЧ (прикосновение) вместо откидывания, чтобы отклонить его? Показывать значки в меню параметров при использовании Theme.Holo Перехват вызова на Android Сохранение чисел с плавающей запятой в базе данных android Как программно удалить уведомление из панели уведомлений в android? Android: передать список <GeoPoint> в другую активность Loop / бесконечный ScrollView React-Native Как получить весь новостной контент с новостного сайта Удаление указанного количества строк из базы данных SQLite FitsSystemWindows и дополнительное дополнение на kitkat Symfony2 basic http auth, работает с curl, но не на Android OnGetViewFactory вызывается только один раз для нескольких виджетов Предупреждение: не размещайте классы контекста Android в статических полях; Это утечка памяти (а также прерывает Instant Run) Должен ли я беспокоиться о различии между основной нитью и потоком пользовательского интерфейса в Lollipop и дальше? Проблема с Android, выясняя, как последнее последнее исправление GPS

Преобразование строки в класс

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

Я пытаюсь использовать:

String myClass = "some_user_input.class" Intent myIntent = new Intent(getApplicationContext(), myClass); startActivity(myIntent); 

… переходить от одной активности к другой.

Я могу сделать это нормально, когда я ссылаюсь на свою новую активность непосредственно в жестком коде и не пытаюсь скомпилировать ее из текста (например, classA.class), однако я хочу иметь возможность построить свое намерение, передав ему некоторую строку, скомпилированную Пользователем.

Например, если пользователь вводит B в edittext, я хочу перейти в classB.class Если пользователь вводит Z, я хочу перейти в classZ.class .

Есть ли способ, которым я могу скомпилировать класс, который я хочу использовать, используя строки, которые затем конвертирую в класс?

Заранее спасибо!

Механизм отражения позволяет это сделать:

 String myClass = "some_user_input"; Class<?> clazz = Class.forName(myClass); Intent myIntent = new Intent(getApplicationContext(), clazz); 

Обратите внимание, что эти классы должны быть включены в XML-манифест андроида.

Также обратите внимание, что в этом примере я не обрабатывал исключение 🙂

Это мое решение с использованием Class.forName() :

 String myClass = "foo.class"; Intent i = new Intent(getApplicationContext(), Class.forName(myClass)); startActivity(i);