ListView задать Tag

Рейтинг: 0Ответов: 2Опубликовано: 21.09.2014

Добрый вечер. Столкнулся с такой проблемой. Нужно задать каждому Item в ListView свой Tag или ID, выбор пал на Tag потому, что он принимает String. У меня есть массив со String данными, нужными для присвоения каждому Item. Проблема в том, что когда я разбираю массив и в нем же присваиваю Tag, то по нажатию получаю только последний элемент. Хотя я уверен, что делаю все неправильно. Прошу помощи и заранее благодарю. Код на Pastebin код:

        // MyHardArray - массив со значениями для списка, просто имена людей
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, MyHardArray);
        adapter.notifyDataSetChanged();
        listview.setAdapter(adapter);

        // Обработчик нажатия
        listview.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = new Intent(this, OneActivity.class);
                // Здесь имена людей которые будут отображены по нажатию
                String MyTextOnNewActivity = (String) ((TextView) view).getText();

                // пример массива с нужными данными в Tag
                // Разбираем его и присваиваем тэг
                String[] MyTagArray = new String[]{ "VasHello","TesWorld", "MekLeon", "SecMih" };
                for(String sT:MyTagArray){
                    view.setTag(sT);
                }
                            // Отправляем данные в другой Activity - Имена
                intent.putExtra(MY_TEXT_ON_NEW_ACTIVITY, MyTextOnNewActivity);
                            // Вот тут отправляется Тэг но только последний, мне нужно для каждого элемента свой
                intent.putExtra(MY_TAG_ON_NEW_ACTIVITY, view.getTag().toString());
                startActivity(intent);
            }
        });

Ответы

▲ 1Принят

Я бы сделал модель с двумя полями: имя и id

class someData{
 String name;
 string id;
}
  1. Получаем имена, создаем ArrayList<someData> array;
  2. Пишем имена и id в этот массив!
  3. Создаем адаптер и даем ему этот массив
  4. По нажатию на пункт, someData data = adapter.getItem();
  5. Отправляем в другую активити:

    Intent intent = new Intent(this, OneActivity.class);
    intent.putExtra(MY_TEXT_ON_NEW_ACTIVITY, data.name);                intent.putExtra(MY_TAG_ON_NEW_ACTIVITY, data.id);
    startActivity(intent);
    
▲ 1
for(String sT:MyTagArray){
    view.setTag(sT);
}

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

int[] MyTagArray = {1,2,3,4,5,6,7,8,9};
int view;
for(int i : MyTagArray){
    view = i;
}

Какое значение в итоге будет в i?
Правильно, значение последнего элемента массива (9).
Так же и в вашем коде в Tag оказывается всегда последний элемент массива.
Вообще то, как вы это пытаетесь сделать - дичайший быдлокод, но если его попробовать сделать рабочим, то получится что-то типа:

String[] MyTagArray = new String[]{ "VasHello","TesWorld", "MekLeon", "SecMih" };
view.setTag(MyTagArray[position]