Скрытое поле/тег в 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});
Ответы
Ответ 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>