ListView和隐藏的ID。怎么可能?

时间:2011-04-12 22:29:53

标签: android listview adapter

我正在为Android开发一个应用程序,现在我已经实现了一个ListView,它显示了一个连接到数据库的课程列表。

我想知道如何用名称包含一个隐藏的id(来自db),这样一旦用户点击元素,app就会转到所选课程的相对视图。

如何在课程视图中导航期间保持id?

目前我的代码只是从db加载课程名称并在列表视图中设置:

ArrayAdapter<String> result = new ArrayAdapter<String>(CourseActivity.this, android.R.layout.simple_list_item_1);

for (CourseRecord c : get()) 
 result.add(c.getFullname());

lv.setAdapter(result);

显然我也可以做c.getid(),但我不在哪里放id。

非常感谢。

P.S。:也许有人也有一个非常漂亮的列表视图图形?

3 个答案:

答案 0 :(得分:10)

像这样更改你的数组适配器。

private ArrayAdapter<String> result = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1){
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.row, null);
        }
        v.setTag(getMyIdForPosition(position));
        return convertView;
    }
};

并有一个项目点击处理程序来接收选定的ID

   private OnItemClickListener itemClickedHandler = new OnItemClickListener() {
    public void onItemClick(AdapterView parent, View v, int position, long id)
    {
        String myId = (String)v.getTag();
        doYourStuff(myId);
    }
    };

将侦听器分配给列表

myList= (ListView)findViewById(R.id.history);
myList.setOnItemClickListener(itemClickedHandler); 

答案 1 :(得分:2)

您可以将ID存储在隐藏的TextView中。在列表项XML中,将“android:visibility =”gone“'添加到TextView中。同样在点击处理程序中,您可以从textview中读取id。

答案 2 :(得分:1)

您还可以使用View的setTag(Object object)方法存储id。使用getTag()方法从该视图中提取该ID。