Подтвердить что ты не робот

Скрытое поле/тег в TextView?

Я хочу передать значение, которое будет генерироваться во время выполнения, через TextView. свойство text используется для некоторых других данных, и данные, которые я хочу передать, не будут отображаться. Таким образом, это похоже на скрытый тег. Возможно ли это с TextView? Если да, то какое свойство TextView.

Для простоты представьте, что я вытаскиваю идентификатор и ТЕКСТ из таблицы данных. Теперь ТЕКСТ отображается в TextView, но когда я хочу передать ссылку на эту конкретную строку таблицы на какую-то другую функцию, я хочу передать идентификатор в качестве аргумента/дескриптора. Таким образом, идентификатор будет скрыт и связан с TextView. Как мне это сделать? Если это невозможно, вы можете предложить любую альтернативу для этого? BTW, TextView встроен в ListView.

Код адаптера:

cursor = db.rawQuery("SELECT * FROM EmpTable", null);

adapter = new SimpleCursorAdapter(
                this, 
                R.layout.item_row, 
                cursor, 
                new String[] {"Emp_Name"}, 
                new int[] {R.id.txtEmployee});
4b9b3361

Ответ 1

Попробуйте setTag (int, Object) и getTag (int). Есть даже версии, которые не принимают ключ, если вы просто хотите сохранить одно значение. Из документов:

Устанавливает тег, связанный с этим Посмотреть. Тег можно использовать для отметки вида в своей иерархии и не должен быть уникальным в иерархии. Теги также может использоваться для хранения данных внутри взгляд, не прибегая к другому структуры данных.

Итак, вы можете сделать:

textView.setTag(myValue);

и верните его позже:

myValue = textView.getTag();

Поскольку интерфейс использует Object, вам нужно будет добавить отливки. Например, если ваше значение равно int:

textView.setTag(Integer.valueOf(myInt));

и

myInt = (Integer) textView.getTag();

Изменить - в подкласс и добавьте тег, используйте:

adapter = new SimpleCursorAdapter(this, R.layout.item_row,
        cursor, new String[] {"Emp_Name"}, new int[] R.id.txtEmployee}) {
    @Override
    public View getView (int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        view.setTag(someValue);
        return view;
    }
};

Ответ 2

Вы можете использовать setTag() и getTag().

Ответ 3

Одним из способов сделать это будет то, что ваш ListAdapter раздувает макет вместо TextView для каждого элемента списка. Затем у вас могут быть другие (невидимые) поля, скрытые в макете.

xml может выглядеть так:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView android:id="@+id/visible_text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Visible text"/>
    <TextView android:id="@+id/hidden_value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="hidden value"
    android:visibility="gone"/>
</LinearLayout>