2013-04-02 25 views
0

當我抓住信息從數據庫(我使用MySQL),我想也搶行的id並以某種方式把它分配給每個'listView`的一行。包括從MySQL錶行ID在Android的ListView控件(各列表項)

例如,假設有一個名爲fruit表。 16中的fruit_idorange。當listView顯示水果的列表,用戶點擊某行,顯示橙色,我希望能夠在該行的訪問fruit_id(16)。但我不確定在哪裏「隱藏」它。

這樣做似乎有很多種方法可以做到這一點了一些初步的研究。最簡單的可能是使用tag,這是最好的方法嗎?如果是這樣,你怎樣才能給它分配一個id

回答

1

創建一個名爲class水果。

class Fruit { 
    private int fruit_id; 
    private String fruit_name; 

    // Constructors 

    // Getters and Setters 
} 

使用的ArrayAdapter<Fruit>作爲ListAdapterListView。然後在ListViewonItemClickListener,獲取Fruit對象並獲取其ID。

+0

我已經這樣做其實這個確切的方法......所以,我找回在適配器我getView方法的ID ...但..我該怎麼用它_do_?這是我的主要問題。我如何將它(而不是一個UI元素)分配給該行? – KickingLettuce

+0

其實當你指定'ArrayAdapter ''作爲ListAdapter',水果對象被自動分配到對應的'ListView'項目。在'onItemClickAdapterView 父,觀景,INT位置,長id'方法,您檢索使用'((果樹)mAdapter.getItem(位置))。的getId()' – jaibatrik

1

如果您使用的是ArrayAdapter來支持您的ListView,那麼@ jaibatrik的建議絕對是一個好建議。但是,如果您使用的是CursorAdapter,則可能更容易利用getItemId()的返回值。

默認情況下,CursorAdapter將尋找一個列名爲"_id"Cursor你爲它供給和返回,作爲id值當你點擊一個項目:

onItemClick(AdapterView<?> parent, View view, int position, long id) 

這最後的值將包含ID你的光標項目。您也可以覆蓋此行爲,並讓它返回您在Cursor中可能訪問的任何其他唯一值。

對於ArrayAdapter也是如此:默認情況下,它將返回數組中項目的位置作爲唯一ID。但是,通過重寫該方法,您可以輕鬆地使其返回fruit_id。然後它將直接通過onItemClick(...)傳遞,這可以節省您在那裏檢索它(再次)。


我的問題是,如果我搶,例如,ITEM_ID(不只是項目), 我在哪裏把ITEM_ID在ListView行(Android上側)?

具有代表你在列表中可視化的數據對象的美,是你已經擁有的所有成分,使其工作。讓我們通過@jaibatrik給出的Fruit例如,添加一個getter方法這個例子的目的:

class Fruit { 
    private int fruit_id; 
    private String fruit_name; 

    // Constructors 

    // Getters and Setters 
    public int getId() { return fruit_id; } 
} 

在評論你描述你從數據庫中檢索數據的水果,並在列表填充它:

List<Fruit> fruits = ... 

該列表應該是支持您的ArrayAdapter的數據集。更具體地講,因爲它是一個類型類,你應該有你設定轉接器來ListViewArrayAdapter<Fruit>實例。

現在,假設您對ListView設置了OnItemClickListener,則只要用戶點擊某個項目,它就會觸發。使用傳入回調的參數,就可以讀出與被選擇的位置相關的項目:

@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    Fruit fruit = (Fruit) parent.getItemAtPosition(position); 
    int fruit_id = fruit.getId(); 
    ... 
} 

檢索了對象,你可以做任何你所保存的數據一樣。無需明確設置ID對行的看法,因爲它應該已經是背上ListView數據集的一部分。

+0

我使用ArrayAdapter的ID。但我的問題仍然存在,我在哪裏存儲ID? – KickingLettuce

+1

@KickingLettuce:根據您的其他評論,你已經有某種簡單對象的封裝行數據。你的'ArrayAdapter'應該將這些數據對象與基於'位置'的視圖相關聯。只要用戶點擊一行,就可以傳入相同的「位置」,這使您可以從「ListView」或其「Adapter」中檢索整個對象。換句話說:據我所知,**你已經存儲了ID **,所以我有點不確定你不清楚什麼?也許在你的問題中分享一些代碼來確定確切的問題是個好主意? –

+0

我還沒有代碼。我正在尋找從MySQL存儲行標識。我通過一個'AsyncTask'傳入,我從我想要的表中獲取項並將它們放入'onPostExecute()'中的對象中。我的問題是,如果我抓住,例如,item_id(不只是項目),我在哪裏把item_id放在listView行(在Android端)?我需要這些,例如,如果我想要刪除或編輯該行的信息,我可以傳回Databse。 – KickingLettuce