2016-08-13 3 views
0

Следующий вопрос SO how-can-i-assign-an-id-to-a-view-programmatically объясняет, как программно установить id в представления. Моя проблема несколько отличается. Я хотел бы знать, можно ли программным образом задавать имя ресурса id/name для массивов.Как я могу присвоить id программно созданному массиву в android?

ArrayList<String> new_list = new ArrayList<>(); 
    String [] stringArray = {"foo", "bar"}; 

    for(String str:stringArray) { 
     new_list.add(str); 
    } 
    /* This is a random example of doing things I 
    * certainly have more complex computation 
    * add more random item and convert it back to array 
    */ 
    new_list.add("random_1"); 
    new_list.add("random_n"); 

    String [] updatedArray = new String[new_list.size()]; 
    updatedArray = new_list.toArray(updatedArray); 

Resource ID определяется как

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <item name="reservedNamedId" type="id"/> 
</resources> 

Теперь я хочу сделать что-то вроде этого

updatedArray.setID(R.id.reservedNamedId); 

Но , которая не компилируется поскольку массив не имеет метод setID, такой как класс Views.

Я понимаю, что если мой массив строк определен в xml, я мог бы использовать атрибут name для доступа к нему по всему миру, но то, что я хочу, - это программно создать массив и назначить глобальное имя/id. Поэтому основной целью было определить ресурс массива и сделать его доступным глобально через идентификатор ресурса. Является ли это возможным? Возможно ли это каким-то другим способом?

+1

'// не разрешено, так как массив не имеет метода setID'. Это путаное описание. Лучше: 'то не компилируется'. – greenapps

+0

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

+0

@greenapps thanks обновил сообщение – jazaman

ответ

0

Иды, о которых вы говорите, не предназначены для использования ни для чего иного, кроме представлений или данных только для чтения. Я бы рекомендовал хранить ваш массив в SharedPreferences или передать его внутри пакета, связанного с намерением.

Первый подход может быть реализован с помощью следующего кода:

SharedPreferences.edit().putStringSet("your_key", stringSet) 
SharedPreferences.getStringSet("your_key", defaultSet) 

Введение второго подхода можно найти здесь (Passing ArrayList through Intent).

+0

Спасибо @Jacob Я подумал об этом, и, поскольку нет более ясного способа, мне, возможно, придется реализовать нечто подобное, но оно побеждает цель, поскольку моя существующая база кода обрабатывает только массивы. – jazaman

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