2015-04-07 33 views
0

我的代碼:如何在Android ListView中爲每個項目設置唯一的ID?

  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'?

在我的代碼中,我在每個項目中都添加了expense_id,然後將它分開以獲取id。但這是一個不好的方法。任何方式我可以爲每個listItem設置一個隱藏的ID屬性?我也試過 - listItem.add(expense_id,「String object here」);這樣我就可以得到等於expense_id的索引。 但由於ArrayList的這項工作必須從指數0開始

可能的答案:
1 - 用戶自定義適配器:不,我已經正確實施ArrayAdapter。
2 - 使用setTag,getTag?這適用於整個ListView對象。它不適用於單個項目。

+0

從你的代碼我可以看到你在添加到你的列表之前使用字符串,所以爲什麼你不管理另一個列表只有id,當用戶點擊列表中的項目獲取位置並獲得id。你已經做了不好的代碼,所以添加更多。 –

+0

[This](http://stackoverflow.com/questions/6680430/get-unique-results-from-json-array-using-jquery)可能會幫助你。 – Cai

回答

0

您可以創建費用ID單獨的列表,獲取費用ID。

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

新增expenseId在列表中的...循環

expenseIds.add(expense_id); 

你可以得到expense_id INT onItemClick方法如下面的代碼

expenseIds.get(position); 
+0

謝謝。這工作! – simranjazz

2

您可以將ID存儲在單獨的列表中並同時保留這兩個ID。

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

和你的項目的點擊偵聽器內可以從位置變量

listIds.get(position); 
+0

謝謝!這很有幫助! – simranjazz

+0

謝謝你的好主意@ Proxy32 – michael

0

添加TextView該行並將其設置值作爲行的id。

接下來,設置visibilty=gone

無論何時您需要該ID,只需將其轉換爲int即可。

相關問題