java - 如何为Android ListView中的每个Item设置唯一ID?

标签 java android android-listview arraylist

我的代码:

            JSONArray jArray = new JSONArray(result);
            if(jArray.length() > 0) {
                for (int i = 0; i < jArray.length(); i++) {
                    JSONObject json_data = jArray.getJSONObject(i);
                    expense_id = json_data.getInt("expense_id");
                    client_name = json_data.getString("client_name");
                    expense_type = json_data.getString("expense_type");
                    expense_amount = json_data.getInt("expense_amount");
                    listItems.add(i, expense_id + "- " + client_name + " | " + expense_type + " : Rs. " + String.valueOf(expense_amount));
                }
                adapter=new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,listItems);
                ListView list_expenses = (ListView) findViewById(R.id.list_expenses);
                list_expenses.setAdapter(adapter);
                registerForContextMenu(list_expenses);
                list_expenses.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, final View view,int position, long id) {
                        final String item = (String) parent.getItemAtPosition(position);
                        final int extra_expense_id = Integer.parseInt(item.split("-")[0]);
                        Intent intent = new Intent(HomeScreenActivity.this, ViewExpenseActivity.class);
                        intent.putExtra(EXTRA_EXPENSE_ID, extra_expense_id);
                        startActivity(intent);
                    }
                });
            }

当我使用 onItemClick 监听器时,我想将“expense_id”发送到下一个 Activity。但如何为每个项目设置单独的“expense_id”?

在我的代码中,我在每个项目中添加了费用_id,然后将其拆分以获取 ID。但这是一个糟糕的方法。有什么办法可以为每个 listItem 设置隐藏的 ID 属性吗?

我也尝试过 - listItem.add(expense_id, "String object here");这样我就可以获得等于expense_id的索引。 但这项工作是因为 ArrayList 必须从索引 0 开始。

可能的答案:
1 - 用户自定义适配器:否,我已经正确实现了 ArrayAdapter。
2 - 使用setTag、getTag?这适用于整个 ListView 对象。它不适用于单个项目。

最佳答案

您可以将 ID 存储在单独的列表中并维护两者。

listItems.add(i, expense_id + "- " + client_name + " | " + expense_type + " : Rs. " + String.valueOf(expense_amount));
listIds.add(i,expense_id);

在您的项目点击监听器中,您可以从位置变量获取费用 id

listIds.get(position);

关于java - 如何为Android ListView中的每个Item设置唯一ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29492706/

相关文章:

android - 尝试 Flutter hello world 代码时出现 "Failed to apply plugin [id ' kotlin-android']"

android - 确定何时取消随机通知,或何时触发 PendingIntent

android Recyclerview Layoutmanager 的 onLayoutChildren item 内容改变时调用

java - 使用数据库时出现"DatabaseIOException: File system error (12)"?

java - 从Firebase数据库获取数据时如何准确知道未能转换其值的属性

java - JTable 列 modelIndex 与 viewIndex

android - 无法使用 SimpleAdapter、ViewBinder 和 Asynctask 将图像从 ListView 设置到 ImageView

java - spring 上下文未加载

android - Android 浏览器上的 SVG 渲染

android - 如何检查我的 ListView 是否有可滚动的项目数?