0

所以基本上我有来自数据库的记录,每条记录都有自己的唯一 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);

            }
        });

请帮忙。

4

2 回答 2

2

为什么不直接使用 arg2(这是被点击的项目的位置http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html)从您的arrayList 中获取适当的地图?

例如:

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

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

于 2012-08-08T22:00:59.313 回答
0

这一切都在 OnItemClickListener()

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

你是对的,你没有唯一的 ID,但你可以通过使用 aCursorAdapter和 a来改变它LoaderManager。使用 CursorLoader 时,参数long arg3成为唯一 ID。CursorLoader使用LoaderManager, 和可能是一个很好的附加好处ContentProvider,尽管我告诉你这个是为了你可以做一些研究。至于如何做到这一点,你有几个选择。当您将项目放入 中时ListView,您可以给它一个带有setTag()唯一 ID 的标签。用你现在已经拥有的东西来实现不会有太多额外的代码。您的另一个选择是只检查int arg2哪个是ListView. 缺点是您没有数据库中的唯一 ID。但它会告诉您哪些是列表中的哪些可能是您需要的。如果您需要 ID,那么前者就是您要做的。

希望能帮助到你。

于 2012-08-08T21:52:10.830 回答