【问题标题】:How to set unique ID for each Item in Android ListView?如何为 Android ListView 中的每个项目设置唯一 ID?
【发布时间】:2015-04-07 13:22:29
【问题描述】:

我的代码:

            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”发送到下一个活动。但是如何为每个项目设置单独的 'expense_id'?

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

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

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

【问题讨论】:

  • 从您的代码中我可以看到您在添加到您的列表之前正在使用字符串,那么您为什么不仅为 id 管理另一个列表,并且当用户单击列表项时获取位置并获取身份证。您已经编写了错误的代码,因此请在其中添加更多代码。
  • This 可能会对您有所帮助。

标签: java android android-listview arraylist


【解决方案1】:

您可以将 id 存储在单独的列表中并同时维护它们。

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

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

listIds.get(position);

【讨论】:

  • 谢谢!这很有帮助!
【解决方案2】:

您可以为费用 ID 创建单独的列表。

ArrayList<Integer> expenseIds = new ArrayList<Integer>();

在 for...loop 的列表中添加了费用 ID

expenseIds.add(expense_id);

您可以像下面的代码一样获取费用 ID int onItemClick 方法

expenseIds.get(position);

【讨论】:

    【解决方案3】:

    TextView 添加到该行并将其值设置为该行的ID。

    接下来,设置visibilty=gone

    当您需要 id 时,只需将其转换为 int

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 2020-03-31
      相关资源
      最近更新 更多