Как использовать переменную при вызове новой деятельности в намерении? - PullRequest
2 голосов
/ 02 февраля 2010

у меня есть следующий код для вызова новой активности

Теперь я хочу использовать переменную для вызова новой активности

Строка var1, var2, var3; var1 = "Войти"; var2 = "Регистрация"; var3 = "больше";

Intent i; 
i = new Intent(Favorites.this, Login.class);  --> login.class with var 
startActivity(i); 

Может ли кто-нибудь подсказать мне, как этого добиться ???

Ответы [ 7 ]

8 голосов
/ 02 февраля 2010

Отредактировано : добавлен переменный класс активности.

Вы должны установить переменные в намерении как дополнительные функции в намерении. Вы можете легко передать имя класса в ваше намерение. Так что вы могли бы сказать:

Class activityClass = Login.class;  // This could be passed in as a variable.

Intent i; 
i = new Intent(Favorites.this, activityClass);  --> login.class with var 
i.putExtra("var1", "Login");
i.putExtra("var2", "Signup"); 
i.putExtra("var2", "more");
startActivity(i); 

Вот пример

Вы также можете поместить переменные в пакет и передать весь пакет как дополнительные функции следующим образом:

Class activityClass = Login.class;

Intent i; 
i = new Intent(Favorites.this, activityClass);  --> login.class with var 
Bundle bundle = new Bundle();
bundle.putString("var1", "Login");
bundle.putString("var2", "Signup"); 
bundle.putString("var2", "more");
i.putExtras(bundle);
startActivity(i); 
4 голосов
/ 02 февраля 2010

Вы не можете передать String в качестве параметра, это должно быть Activity.

Используйте оператор if или switch для переключения между различными вариантами выбора.

Нечто подобное может быть ....

Intent i; 
switch(var)
case:Login
i = new Intent(Favorites.this, Login.class); 
break; 
case:Signup
i = new Intent(Favorites.this, Signup.class);
break;   
case:More
i = new Intent(Favorites.this, More.class);
break; 


startActivity(i); 
1 голос
/ 06 января 2011

попробуйте это
try {<br /> String className = 'com.www.tutorialforandroid.com.openActivity';<br /> Intent openNewIntent = new Intent( this, Class.forName( className ) );<br /> startActivity( openNewIntent );<br /> } catch (ClassNotFoundException e) {<br /> e.printStackTrace(); <br /> }

1 голос
/ 02 февраля 2010

По ссылке, которую дал Мориц, вы также можете взглянуть на putExtras методы.

См. Дополнительную информацию здесь и ищите putExtra (URL выглядит не очень хорошо на SO)

* Отредактировано:

Из сообщения Донала Рафферти, теперь я понимаю, что вы имеете в виду в ОП.

Что вы можете сделать, это ниже:

String theClass = "Login";
StringBuilder myAction = new StringBuilder("com.yourpackage.");
myAction.append(theClass);
Intent i = new Intent(myAction.toString());
startActivity(i)

Строка myAction (в этом примере com.yourpackage.Login должна быть указана в AndroidManifest.xml под действием

Из документа:

public Intent (строковое действие)

Начиная с: Уровень API 1 Создать намерение с заданным действием. Все остальные поля (данные, тип, класс) являются пустыми. Обратите внимание, что действие должно быть в пространстве имен, потому что Intents используются в системе глобально - например, системное действие VIEW - android.intent.action.VIEW; пользовательское действие приложения будет выглядеть примерно так: com.google.app.myapp.CUSTOM_ACTION.

0 голосов
/ 05 марта 2019

Для

String activity="com.namespace.MainActivity";

Это будет делать:

 private void openActivity(String activity, Context context) {
    try {
        Class cls = Class.forName(activity);
        Intent intent = new Intent(context, cls);
        context.startActivity(intent);
    } catch (ClassNotFoundException e) {
        Log.e(TAG,"Class was not found"+ e.getLocalizedMessage());
    }catch (Exception e){
        Log.e(TAG,"Error occurred"+ e.getLocalizedMessage());
    }
}
0 голосов
/ 09 ноября 2011

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

Intent intent = new Intent();
String packageName = "my.package"; 
String className = "com.package.MyActivity";
intent.setClassName(packageName, className);
startActivity(intent);
0 голосов
/ 02 февраля 2010

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

public Intent(String  action, Uri  uri, Context  packageContext, Class<?>  cls)

В URI вы можете поместить свою собственную информацию. См. эту ссылку для более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...