Преобразовать строку в имя объекта.IERstring.objectname - PullRequest
0 голосов
/ 27 октября 2011

У меня проблемы с выяснением, как использовать жало в качестве имени объекта. Позволь мне объяснить. У меня есть динамически назначаемое изображение, которое я отмечаю. Я получаю этот тег в виде строки, и у меня есть сохраненная строка (определение) с тем же именем, что и тег. Я не хочу иметь возможность SetText () с помощью тега, который совпадает с именем укуса. Вот что я пытаюсь достичь:

        public void ShowDefinition(ImageView v){
        String str=(String) v.getTag();
        setContentView(R.layout.ditionary);
        TextView t = (TextView)findViewById(R.id.definition);
        if(str == "def1")
            t.setText(R.string.def1);
        if(str == "def2")
            t.setText(R.string.def2)
        }

Операторы if - это то, что я хотел бы сделать проще. Строка str - это строка, извлеченная из тега. Как видите, строки ресурсов Android имеют то же имя, но я не могу понять, как использовать str в аргументе setText. Есть идеи?

Ответы [ 4 ]

5 голосов
/ 27 октября 2011

Используйте Resources.getIdentifier (...) для поиска идентификатора ресурса по имени.

public void ShowDefinition(ImageView v) {
    String str=(String) v.getTag();
    setContentView(R.layout.ditionary);
    TextView t = (TextView)findViewById(R.id.definition);
    t.setText(getResources().getIdentifier(str, "string", "com.your.package.name"));

Замените com.your.package.name именем пакета вашего приложения.

2 голосов
/ 27 октября 2011
str.equals("def1");

Вы должны использовать equals.

. Вы можете получить доступ к вашей строке с помощью ..

String def1String = getResources().getString(R.string.def1);
t.setText(def1String);

getResources () - это метод в контексте или действие.

0 голосов
/ 27 октября 2011

Я предполагаю, что ваши типы данных здесь из того, что я вижу в вашем примере кода, но похоже, что вам нужно использовать HashMap<String, Text> для корреляции String с Text (это другой String?), Который вы устанавливаете в setText().Это упростит ваши условия if / else, будет более динамичным и будет более производительным, потому что он хешируется.

Я не уверен, откуда в вашем образце берутся R.string.def1 и R.string.def2, но этовы загружаете их в HashMap, как показано в начале:

Map<String, Text> strToText = new HashMap<String, Text>();
strToText.put("def1", R.string.def1);
strToText.put("def2", R.string.def2);

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

t.setText(strToText.get(str));

Вы также можете сделать что-то, где R.string сам по себе является HashMap вместо того, чтобы копировать его (если у вас есть доступ, измените его, то есть ... похоже, это может быть какая-то библиотека Android).Вы также можете рассмотреть возможность использования отражения Java для выполнения поиска и / или инициализации карты, чтобы вам не приходилось менять код каждый раз, когда изменяются определения.

0 голосов
/ 27 октября 2011

Использование equals метод:

if(str.equals("def1")) 
...

или используйте переключатель (если у вас есть java7)

switch(str) {
   case "def1":
     ...
     break;  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...