2016-11-28 3 views
0

В одном из экранов моего приложения есть кнопка, которая выводит пользователя на другой экран. Экран назначения определяется предпочтением, сохраненным в SharedPreferences. Как установить класс Intent из общих настроек?Использование SharedPreferences для установки значения класса для намерения

Это в настоящее время, что у меня есть для кнопки:

case R.id.favoriteButton1: 
       final Intent favorite1Screen = new Intent(); 
       favorite1Screen.setClass(this, prefs.getString("favorite1Class", "")); 
       startActivity(favorite1Screen); 
       break; 

И это один из экранов, где можно установить, что предпочтение: случай R.id.action_favorite_1:

  final SharedPreferences prefs2 = getSharedPreferences("myDataStorage", MODE_PRIVATE); 
      final SharedPreferences.Editor nEditor = prefs2.edit(); 

      nEditor.putString("favorite1Text", "Job Hazard Analysis"); 
      nEditor.putString("favorite1Color", "Safety"); 
      nEditor.putString("favorite1Intent", "Job_Hazard_Analysis"); 
      nEditor.commit(); 

      break; 

Цель явно не примет строковое значение, чтобы установить его класс, есть ли способ, которым я могу сделать эту работу?

+1

Я не рекомендую этого. Использование внешнего ввода для * напрямую * создание имени класса открывает проблемы с безопасностью. Используйте некоторую логику проверки для сопоставления из вашей строки в Java 'Class' (например, статический' HashMap '), чтобы иметь возможность игнорировать неожиданные значения. – CommonsWare

ответ

0

Вы даже можете настроить контекст и класс от Intent конструктора, как это:

Intent intent = new Intent(this, YourClass.class);

Вы можете продолжать делать это с помощью метода setClass хотя. Я думаю, что ошибка может быть в том, как интерпретируется ссылка на класс.

Я думаю, что, вероятно, ваша строка имени класса должна быть полностью квалифицированным именем класса. Значение пакета и все должно быть объяснено. Как:

`com.mypackage.myclass_name` 

Тогда, как только у вас есть, что один в общей Preferences, вы можете попробовать:

Intent intent = new Intent(this, 'com.mypackage.myclass_name');

или, если это не работает, попробуйте:

Intent intent = new Intent(this, Class.forName('com.mypackage.myclass_name'));

+0

Я попытался использовать все эти методы, однако проблема все еще остается в том, что она не принимает строку как допустимый метод ввода для присвоения имени класса. – Xander

+0

Мои извинения Я делал простую ошибку, которая действительно решила проблему. – Xander

+0

@xander Полезно знать. Удачи там. – MarkSkayff

 Смежные вопросы

  • Нет связанных вопросов^_^