Динамически добавляемые строки, setOnClickListener TextView - PullRequest
1 голос
/ 19 марта 2011

У меня есть цикл for, который каждый раз печатает строку с TextView внутри. Я хочу, чтобы это TextView было кликабельным, и при щелчке он должен начать другое действие и отправить идентификатор с намерением. Но это то, что я не могу работать. Все ссылки хорошо отображаются в таблице, и текстовые просмотры можно нажимать, но все ссылки отправляют меня к следующему действию с тем же идентификатором, идентификатором последней ссылки.

Вот упрощенная версия содержимого цикла for:

TextView title = new TextView(this);
title.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
title.setText(titleLine);
title.setClickable(true);
title.setId(rows);
rows++;

title.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        Intent myIntent = new Intent(a.this, b.class);
        myIntent.putExtra("id", idLine);
        a.this.startActivity(myIntent);
    }
});

contRight.addView(title);

Полагаю, проблема в том, что все textViews выглядят одинаково, поэтому последний setOnClickListener работает со всеми ссылками. Однако я добавил идентификатор для каждого заголовка с таким кодом: title.setId (rows); , поэтому все они должны быть уникальными.

Кто-нибудь может помочь? :) Спасибо!

1 Ответ

4 голосов
/ 19 марта 2011

Разве idLine не должно быть v.getId()? Хорошо, чтобы это значение было как можно более «свежим», чтобы вы не читали старое значение: в этом случае значение последней строки, которое, вероятно, скрывалось в idLine. Следовательно, получение значения из представления является самым безопасным методом.

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

title.setTag(rows);

, а затем и позже:

intent.putExtra((Integer) v.getTag());

Для хранения нескольких объектов (с ключами) вы можете использовать:

title.setTag("rowid", rows);

, а затем получить его, используя:

intent.putExtra((Integer) v.getTag("rowid"));

и затем вы можете добавить дополнительные ключи, если ваши требования изменились.

В любом случае, намерение тега состоит в том, чтобы хранить информацию для последующего извлечения, тогда как идентификатор должен служить идентификатором для поиска представлений в иерархии.

...