TextView中的隐藏字段/标签?

30
我想通过一个TextView传递在运行时生成的值。text属性用于其他一些数据,而我要传递的数据将不会显示。因此,它就像一个隐藏标记。是否可以使用TextView实现?如果可以,那么TextView的哪个属性可以使用。
为简单起见,假设我从数据表中提取了ID和TEXT。现在TEXT显示在TextView上,但是当我想将对该特定行的引用传递给其他函数时,我希望将ID作为参数/句柄传递。因此,ID将被隐藏并与TextView关联。我该如何做呢?如果不可能,您能否建议任何替代方案来完成这项工作?顺便说一下,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});
3个回答

47

尝试使用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;
    }
};

这看起来不错。然而,我仍然卡住了,因为我不确定它能否与列表适配器一起使用?你知道我们在哪里使用光标和适配器通过提供textView的资源id(如 new int[] {R.id.txtEmployee})来填充ListView吗?在设置ListView的适配器之前,我如何为游标返回的TextView设置标签? - redGREENblue
你能发一下创建适配器的代码行吗?从那里我可以编写子类代码,帮助你添加标签。 - Matthew
2
您可以创建子类适配器并重写 getView 方法来设置标签。 - Ted Hopp
这是我现在正在使用的。这只包括Emp_Name,因为我不知道如何将_id传递给适配器。顺便说一下,我已经更新了原始帖子中的代码以获得更好的可视性。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}); - redGREENblue
非常感谢。这就解决了。我在Java和Android方面还是初学者,所以真的卡住了。看来我得更加努力地学习 :-)。再次感谢! - redGREENblue

8
你可以使用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>

回想起来,我认为Ted的答案更适合你所需的。我的答案更适合需要在运行时动态显示/隐藏信息的情况。 - Cephron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接