如果项目的名称相同,如何找出列表中的哪个项目?

时间:2012-08-08 21:39:16

标签: android

所以基本上我有来自数据库的记录,每条记录都有自己唯一的ID(主键)及其日期(mm:hh mm / dd / yy)我想在我的应用程序列表视图中显示这些记录。但是时间(mm:hh)有点难看,所以我决定只显示列表中的mm / dd / yy,现在问题是,当我编写onitemClick时,如何找出正在点击的项目??因为我没有唯一的ID和列表上显示的确切日期。

ArrayList<HashMap<String, String>> aList = new ArrayList<HashMap<String, String>>();
        HashMap<String, String> map;

        for (int x = Records.size()-1; x >=0; x--)
        {
            map = new HashMap<String, String>();
            map.put("ID", String.valueOf(Records.get(x).getId()));
            map.put("date", Records.get(x).getDate()); //I am going to change this date to just mm/dd/yy


            aList.add(map);
        }

        sd = new SimpleAdapter(this, aList, R.layout.historyactivityrow,
                new String[]
                { "date" }, new int[]              
                { R.id.date });

        lv.setAdapter(sd);

        lv.setOnItemClickListener(new OnItemClickListener()
        {

            public void onItemClick(AdapterView<?> arg0, View view, int arg2,
                    long arg3)
            {
                TextView tx = (TextView) view.findViewById(R.id.date);
                String s = tx.getText().toString();
                Intent intent = new Intent(HistoryActivity.this, EditRecordActivity.class);          
                intent.putExtra("date", s); //I can't do this anymore because now the EditRecordActivity will not know the exact record to be edited.
                startActivity(intent);

            }
        });

请帮忙。

2 个答案:

答案 0 :(得分:2)

为什么不直接使用arg2(单击http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html的项目的位置)从arrayList获取相应的地图?

例如:

long rowID = (aList.get(arg2)).get("ID");

我可能会错误地解释设置,但这可能会引导您朝着正确的方向前进。

答案 1 :(得分:0)

一切都在OnItemClickListener()

public void onItemClick(AdapterView<?> arg0, View view, int arg2,
                long arg3)

您是对的,您没有唯一的ID,但可以使用CursorAdapter LoaderManager来更改该ID。使用CursorLoader时,参数long arg3将成为唯一ID。将CursorLoaderLoaderManagerContentProvider一起使用是一个很好的额外好处,虽然我告诉你这个,所以你可以做一些研究。至于你如何做到这一点,你有几个选择。当您将这些项目放入ListView时,您可以为其指定一个唯一ID为setTag()的标记。用现有的东西来实现这些代码并不多。您的另一个选择是只检查int arg2ListView的位置。缺点是您没有数据库中的唯一ID。但它告诉你哪个是你需要的列表中的内容。如果你需要这个ID,那么前者就是你所做的。

希望它有所帮助。